Форма модели Django не сохраняется/не проверяется
Я новичок в Django, и у меня есть форма комментариев на странице листинга сайта, над которым я работаю. При попытке ввести комментарий он не сохраняется. Я предполагаю, что функция is_valid() не возвращает True, поэтому сохранение не происходит, но я не понимаю, почему он должен быть не валидным. Я думал, что эта функция в первую очередь проверяет, что все поля заполнены правильными данными.
.
Как я уже сказал, я новичок в Django, поэтому любой совет будет принят с благодарностью.
Перенаправление Else является временным, пока я не добьюсь правильной работы.
Views.py
@login_required
def comment(request, listing):
listing = AuctionListings.objects.get(name=listing)
form = NewCommentForm(request.POST)
if form.is_valid():
comment = form.save(commit=False)
comment.user = request.user
comment.listing = listing
comment.save()
return HttpResponseRedirect(reverse("listing", args=[listing.name]))
else:
return HttpResponseRedirect(reverse("listing", args=[listing.name]))
models.py
class Comments(models.Model):
listing = models.ForeignKey(AuctionListings, on_delete=models.CASCADE)
user = models.ForeignKey(User, on_delete=models.CASCADE)
comment = models.CharField(max_length=255, validators=[MinLengthValidator(1)])
date = models.DateTimeField(auto_now_add=True)
forms.py
class NewCommentForm(forms.ModelForm):
class Meta:
model = Comments
fields = [
'comment'
]
widgets = {
'comment': forms.Textarea(attrs={
'placeholder': 'Enter your comment (255 char. max)',
})
}
Старый возврат render
return render(request, "auctions/listing.html", {
"newComment": form,
"listing": listing,
})
В представлении листинга вы каждый раз создаете новую форму, вместо того чтобы заново отображать экземпляр "newComment": NewCommentForm(),
Вы хотите передать форму в представление листинга и, если она не действительна, отобразить эту форму, а не новую. Вы захотите создать новую форму, только если представление еще не получает эту форму в качестве аргумента.