Продолжаю осваивать Django и столкнулся с проблемой обновления записи в БД через форму на сайте.
Добавить новую удается, а вот старую обновить - нет. Вроде весь цикл от получения полей до отображения результата на странице проходит, но вот при обновлении страницы понимаю, что ничего не сохранилось. В админке это же вижу.
Что не так делаю, подскажите пожалуйста.
#models.py
class Article(models.Model):
category = models.ForeignKey('Category', on_delete=models.SET_NULL, null=True, blank=False)
slug = models.SlugField('Slug', max_length=150, unique=True, null=True, blank=True)
title = models.CharField('Название статьи', max_length=150, help_text='Название статьи в текущем разделе')
content = models.TextField('Описание статьи', null=True, blank=True)
last_edit_date = models.DateField(default=date.today)
tags = models.ManyToManyField('Tag', related_name='articles', blank=True)
#forms.py
class ArticleForm(forms.ModelForm):
class Meta:
model = Article
exclude = ['slug','last_edit_date']
#fields = '__all__'
widgets = {
'category': forms.Select(attrs={'class': 'form-control'}),
'title': forms.TextInput(attrs={'class': 'form-control'}),
'content': forms.Textarea(attrs={'class': 'form-control','rows': 15}),
'additional': forms.Textarea(attrs={'class': 'form-control','rows': 10}),
'link': forms.URLInput(attrs={'class': 'form-control'}),
'tags': forms.SelectMultiple(attrs={'class': 'form-control'}),
'status': forms.Select(attrs={'class': 'form-control'}),
}
#urls.py
path('articles/new', views.edit_article, {'status':'new'}, name='edit-article'),
path('articles/<str:slug>/edit', views.edit_article, {'status':'edit'}, name='edit-article'),
#views.py
def edit_article(request, status, slug=''):
if slug:
edit_post = get_object_or_404(Article, slug=slug)
status_caption = 'изменена'
else:
edit_post = ''
status_caption = 'добавлена'
if request.method == "POST":
if edit_post:
post_form = ArticleForm(request.POST, instance=edit_post)
else:
post_form = ArticleForm(request.POST)
if post_form.is_valid():
edit_post = post_form.save(commit=False)
edit_post.last_edit_date = date.today
edit_post.save()
context = {
'article': edit_post,
'article_action_title': 'Статья успешно %s!' % status_caption,
'url_parent': request.build_absolute_uri('../')
}
return render(request, 'catalog/article_detail.html', context)
else:
if edit_post:
post_form = ArticleForm(instance=edit_post)
else:
post_form = ArticleForm()
return render(request, "catalog/edit-article.html", {'form': post_form, 'status' : status})
#edit-article.html
<form class="article-form" action="" method="post">
{% csrf_token %}
{{ form }}
<input class="btn btn-primary" type="submit" value="Сохранить">
</form>