Form.is_valid() всегда возвращает False и форма не действительна
У меня есть простая форма для добавления комментариев и во views я проверяю ее на валидность. Но она всегда возвращает False и я получаю ошибку 404 в соответствии с моим кодом. У меня есть несколько предположений, но они не сработали. И теперь я понятия не имею, как найти причину. views.py:
class ProductDetailView(DetailView):
model = Product
template_name = "core/product.html"
context_object_name = "product"
....
def post(self, request, *args, **kwargs):
if request.POST.get("product_detail_form") == 'add_comment_form_two':
if self.request.user.is_authenticated:
form = CommentForm(request.POST)
if form.is_valid():
comment = Review(review=request.POST.get("review"),
rating=request.POST.get("rating"),
author=self.request.user,
product_connected=self.get_object())
comment.save()
print("success ")
return redirect("product_detail", *args, **kwargs)
else:
print("error")
raise Http404
....
html форма
<form action="" method="post">
{% csrf_token %}
{{ comment_form.as_p }}
<input type="submit" name="product_detail_form"
value="add_comment_form_two">add comment</input>
</form>
forms.py
class CommentForm(forms.ModelForm):
review = forms.CharField(
required=True,
widget=forms.TextInput(
attrs={"class": "comment_form", "placeholder": "Comment"}), label=""
)
OPTIONS = (
("1", "1"),
("2", "2"),
("3", "3"),
("4", "4"),
("5", "5"),
)
rating = forms.MultipleChoiceField(widget=forms.CheckboxSelectMultiple,
choices=OPTIONS)
class Meta:
model = Review
fields = ["review", "rating"]
модель
class Review(models.Model):
review = models.TextField(max_length=500)
author = models.ForeignKey(User, on_delete=models.CASCADE)
product_connected = models.ForeignKey(Product, on_delete=models.CASCADE,
related_name="reviews")
creation_date = models.DateTimeField(auto_now_add=True)
last_update_time = models.DateTimeField(auto_now=True)
rating = models.IntegerField(default=0, validators=[MinValueValidator(0),
MaxValueValidator(5)])
Спасибо за любую помощь, я просто не могу понять это уже долгое время.
Дурацкое правило, что я должен написать меньше кода, чем вопрос, потому что мой вопрос состоит из двух предложений