Почему я получаю ошибку, что объект формы моей модели не имеет атрибута 'clean_data'?

У меня есть форма на странице, которую пользователи используют для написания комментариев. Есть представление (comment), которое должно принимать вводимые пользователями данные вместе с некоторой другой информацией и сохранять их в модели. Однако, когда я протестировал его, я получил ошибку:

'CommentForm' object has no attribute 'cleaned_data'

Как это исправить?

views.py:

def comment(request, id):
    if request.method == 'POST':
        form = CommentForm(request.POST) # the form
        if form.is_valid:
            current = get_object_or_404(Listing, id=id)
            user = User.objects.get(pk=request.user.id)
            obj = Comment() # the model
            obj.user = user
            obj.listing = current
            obj.date = datetime.datetime.now()
            obj.title = form.cleaned_data['title'] # this is where the error occurs
            obj.comment = form.cleaned_data['comment']
            obj.rating = form.cleaned_data['rating']
            obj.save()
            return listing(request, current.id, current.name) 

html:

<form action=" {% url 'comment' listing.id %} " method="post" class="comment-form">
    {% csrf_token %}
    <h2>Comment</h2>
    {{ commentForm.title }}
    {{ commentForm.comment }}
    {{ commentForm.rating }}
    <input type="submit" value="Comment" class="submit-btn">
</form>

forms.py:

class CommentForm(forms.Form):
    title = forms.CharField(max_length=60, widget=forms.TextInput(attrs={
        'class': 'comment-title',
        'placeholder': 'Title',
    }))
    comment = forms.CharField(max_length=1000, widget=forms.Textarea(attrs={
        'class': 'comment',
        'placeholder': 'Enter Comment'
    }))
    rating = forms.FloatField(min_value=0, max_value=5, widget=forms.NumberInput(attrs={
        'class': 'rating',
        'placeholder': 'Rating'
    }))

Что вы написали:

if form.is_valid:

Что вы должны были написать:

if form.is_valid():

Пожалуйста, тщательно проверьте свой код, прежде чем задавать вопрос.

Вернуться на верх