如何解决get() 得到了一个意外的关键字参数“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 参数传递给 get
(post
、put
等)函数。由于这些不属于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,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
、post
等请求应返回 HttpResponse
object 而不是模型对象。因此,您应该相应地处理此项目。您可能希望这是 .get_object()
方法。在这种情况下,您可以使用 self.kwargs
:
class NewsCommentsUpdateView(LoginRequiredMixin,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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。