Starck43
@Starck43
Full-stack разработчик (Python, React)

НЕ сохраняются в Django данные из формы в базу данных?

Продолжаю осваивать 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>
  • Вопрос задан
  • 1903 просмотра
Решения вопроса 1
Starck43
@Starck43 Автор вопроса
Full-stack разработчик (Python, React)
Проблема решена.
Некорректно переопределил def save(self, *args, **kwargs)

Полный ответ в комментариях выше. Спасибо за советы!
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы