在我的网址中,我想传递一个密钥并基于该密钥在该视图上查询数据库:
#url.py
path('view/<slug:secret_key>/',DetailMessage.as_view(),name='message'),
class DetailMessage(generic.DetailView):
model = Message
template_name = 'msg/view.html'
def get_queryset(self):
queryset = super().get_queryset()
key =self.request.get('secret_key',None)
return queryset.get(secret_key=key)
但是我收到此错误:
WSGIRequest' object has no attribute 'get'
答案 0 :(得分:0)
URL参数不是存储在请求中,而是存储在self.kwargs
中,因此您可以使用以下命令进行访问:
class DetailMessage(generic.DetailView):
model = Message
template_name = 'msg/view.html'
def get_queryset(self):
return super().get_queryset().filter(
secret_key=self.kwargs['secret_key']
)
请注意,get_queryset
应该返回QuerySet
,而不是 object 。如果您不覆盖get_object
方法,则对.get()
的结果调用.get_queryset(..)
(在pk
或slug
进行过滤后,如果可以找到URL中的这些参数。)