get() 得到了一个意外的关键字参数 'pk_news'

get() got an unexpected keyword argument 'pk_news'

views.py:

class NewsCommentsUpdateView(LoginRequiredMixin, UserPassesTestMixin, UpdateView):
    model = Comment
    fields = ('comment',)
    template_name = 'news/comment_edit.html'

    def get_absolute_url(self):
        return reverse_lazy('news_detail', args=[str(self.object.news.id)])

    def get(self, request):
        return Comment.objects.get(pk_news=self.request.GET.get('news_id'), pk=self.request.GET.get('id'))

    def test_func(self):
        obj = self.get_object()
        if self.request.user.has_perm('news.all') or self.request.user.has_perm('news.delete_news') or obj.author == self.request.user:
            return True 

urls.py:

path('<int:pk_news>/comment_edit/<int:pk>/', NewsCommentsUpdateView.as_view(), name='comment_edit'),
path('<int:pk_news>/comment-delete/<int:pk>/', NewsCommentsDeleteView.as_view(), name='comment_delete'),

模板:

{% for comment in object.comments.all %}
                        <a href="{% url 'comment_edit'  pk_news=news.pk pk=comment.pk %}">Edit</a> |
                        <a href="{% url 'comment_delete'  pk_news=news.pk pk=comment.pk %}">Delete</a>
{% endfor %}

它不起作用并给我一个错误(get() 得到了一个意外的关键字参数 'pk_news')。

url参数传递给getpostput等)函数。由于这些 属于 query string [wiki],因此不属于 request.GET

你因此处理这些:

class NewsCommentsUpdateView(LoginRequiredMixin, UserPassesTestMixin, UpdateView):
    model = Comment
    fields = ('comment',)
    template_name = 'news/comment_edit.html'

    def get_absolute_url(self):
        return reverse_lazy('news_detail', args=[str(self.object.news.id)])

    def get(self, request<b>, pk_news, pk</b>):
        return Comment.objects.get(pk_news=pk_news, pk=pk)

    def test_func(self):
        obj = self.get_object()
        return self.request.user.has_perm('news.all') or \
               self.request.user.has_perm('news.delete_news') or \
               obj.author == self.request.user

您的 getpost 等请求应该 return HttpResponse object 而不是模型对象。因此,您应该相应地处理该项目。您可能希望这是 .get_object() 方法。在这种情况下,您可以使用 self.kwargs:

访问 URL 参数
class NewsCommentsUpdateView(LoginRequiredMixin, UserPassesTestMixin, UpdateView):
    model = Comment
    fields = ('comment',)
    template_name = 'news/comment_edit.html'

    def get_absolute_url(self):
        return reverse_lazy('news_detail', args=[str(self.object.news.id)])

    def <b>get_object</b>(self, *__, **___):
        return Comment.objects.get(<b>pk_news=self.kwargs['pk_news']</b>, <b>pk=self.kwargs['pk']</b>)

    def test_func(self):
        obj = self.get_object()
        return self.request.user.has_perm('news.all') or \
               self.request.user.has_perm('news.delete_news') or \
               obj.author == self.request.user