Django get()获取了一个意外的关键字参数';PKU新闻';

Django get()获取了一个意外的关键字参数';PKU新闻';,django,django-views,django-templates,django-urls,Django,Django Views,Django Templates,Django Urls,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

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 
URL.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'),
path('/comment\u edit/',newcommentsupdateview.as\u view(),name='comment\u edit'),
路径('/comment delete/',newcommentsdeleteview.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 %}
{%用于object.comments.all%中的注释]
|
{%endfor%}

它不工作,并给我一个错误(get()得到一个意外的关键字参数“pk_news”)。

url参数被传递到
get
post
put
等)函数。由于这些不属于,因此它们不在
请求中。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, pk_news, pk):
        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

另外,
get
方法返回的是模型实例而不是响应。(也许应该改为
get_object
)@AbdulAzizBarkat:太棒了!我没有阅读
get
方法在做什么。相应更新。谢谢,你的提示非常有效,我只需要删除部分‍‍‍‍ PKU新闻和它的工作。
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_object(self, *__, **___):
        return Comment.objects.get(pk_news=self.kwargs['pk_news'], pk=self.kwargs['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