Python 位于/ads/ad/2/comment的值错误

Python 位于/ads/ad/2/comment的值错误,python,django,django-forms,django-views,django-templates,Python,Django,Django Forms,Django Views,Django Templates,我试图添加评论到一个用户发布的广告。当我按下“注释”按钮时,它显示的是注释。 这是我的型号。py 这是我的视图。py 最后是我的模板ad_detail.html 您应该在此处使用ModelForm而不是Form class CommentForm(forms.ModelForm): comment = forms.CharField(required=True, max_length=500, min_length=3, strip=True) class Meta:

我试图添加评论到一个用户发布的广告。当我按下“注释”按钮时,它显示的是注释。 这是我的型号。py

这是我的视图。py

最后是我的模板ad_detail.html


您应该在此处使用
ModelForm
而不是
Form

class CommentForm(forms.ModelForm):
    comment = forms.CharField(required=True, max_length=500, min_length=3, strip=True)

    class Meta:
        model = Comment
        fields = ['text']

在您的
CommentCreateView
中,您的所有者收到了
请求
,这就是您显示该错误的原因。因此:

comment = Comment(text=request.POST['comment'], owner=request.user, ad=ad)

您的imgur图像未显示。@BiploveLamichhane我已更新图像链接。谢谢你的回复。
from ads.models import Ad, Comment
from ads.owner import OwnerListView, OwnerDetailView, OwnerCreateView, OwnerUpdateView, OwnerDeleteView
from django.contrib.auth.mixins import LoginRequiredMixin
from django.core.files.uploadedfile import InMemoryUploadedFile
from django.views import View 
from django.shortcuts import render, redirect, get_object_or_404
from django.urls import reverse_lazy, reverse
from django.http import HttpResponse
from ads.forms import CreateForm, CommentForm

class AdDetailView(OwnerDetailView):
    model = Ad

    def get(self, request, pk):
        a = Ad.objects.get(id=pk)
        comments = Comment.objects.filter(ad=a).order_by('-updated_at')
        comment_form = CommentForm()
        context = {'ad': a, 'comments':comments, 'comment_form':comment_form}
        return render(request, 'ads/ad_detail.html', context)
....

class CommentCreateView(LoginRequiredMixin, View):
    def post(self, request, pk):
        ad = get_object_or_404(Ad, id=pk)
        comment = Comment(text=request.POST['comment'], owner=request, ad=ad)
        comment.save()
        return redirect(reverse('ads:ad_detail', args=[pk]))

class CommentDeleteView(OwnerDeleteView):
    model = Comment

    def get_success_url(self):
        ad = self.object.ad
        return reverse('ads:ad_detail', args=[ad.id])

{% if user.is_authenticated %}
<br clear="all"/>
<p>
    {% load crispy_forms_tags %}
    <form method="post" action="{% url 'ads:ad_comment_create' ad.id %}">
        {% csrf_token %}
        {{ comment_form|crispy }}

        <input type="submit" value="Submit">
        <input type="submit" value="All Ads" onclick="window.location.href='{% url 'ads:all' %}'; return false;">       
    </form>
</p>
{% endif %}

{% for comment in comments %}
<p> {{ comment.text }}  
    ({{ comment.updated_at|naturaltime }})
    {% if user == comment.owner %}
    <a href="{% url 'ads:ad_comment_delete' comment.id %}"><i class="fa fa-trash"></i></a>
    {% endif %}
</p>
{% endfor %}

urlpatterns = [
    path('', views.AdListView.as_view()),
    path('ads', views.AdListView.as_view(), name='all'),
    ...
    #comments
    path('ad/<int:pk>/comment', views.CommentCreateView.as_view(), name='ad_comment_create'),
    path('comment/<int:pk>/delete', views.CommentDeleteView.as_view(success_url=reverse_lazy('ads')), name='ad_comment_delete'),
]
class CommentForm(forms.ModelForm):
    comment = forms.CharField(required=True, max_length=500, min_length=3, strip=True)

    class Meta:
        model = Comment
        fields = ['text']
 class CommentCreateView(LoginRequiredMixin, View):

    def post(self, request, pk):
        form = CommentForm(request.POST)
        ad = get_object_or_404(Ad, id=pk)
        comment = form.save(commit=False)
        comment.ad = ad
        comment.owner = request.user
        comment.save()
        return redirect('ads:ad_detail', ad.pk)

   
comment = Comment(text=request.POST['comment'], owner=request.user, ad=ad)