如何从views.py

时间:2018-05-11 18:41:14

标签: django django-class-based-views

所以,我目前在Django中使用基于类的视图,我在urls.py中有这个url调度程序。

urls.py

url(r'^(?P<store_domainKey>.*)/$', views.StoreDetailView.as_view(), name='detail'),

并且在views.py中我希望得到一个来自store_domainKey的论证,它就像以下一样。

views.py

class StoreDetailView(DetailView):
    model = Store
    template_name = 'boutique/detail.html'

    def get_queryset(self, store_domainKey):
        store = ???

我想要做的是访问store_domainKey函数中的get_queryset(),以便在变量store中分配值。我怎样才能做到这一点?

更新

我上面需要的原因是因为我试图将我的FBV改为CBV。我通过在FBV视图中执行以下操作,从urls.py获取store_domainKey到views.py。

def detail(request, store_domainKey):
    store = get_object_or_404(Store, domainKey=store_domainKey)

我也想在我的CBV视图中做同样的事情。但是,get_object_or404无效。

它只会引发以下错误。

TypeError at /downeast/
get_queryset() missing 1 required positional argument: 'store_domainKey'

1 个答案:

答案 0 :(得分:1)

使用以下代码

class StoreDetailView(DetailView):
    model = Store
    template_name = 'boutique/detail.html'

    def get_queryset(self):
        return Store.objects.filter(domainKey=self.kwargs['store_domainKey'])

您收到错误,因为get_queryset不接受任何参数或keword参数。

由于你的url没有任何pk变量,你应该覆盖get_object()方法,因为详细视图需要url中的pk参数或者它可以用作pk的任何参数。

def get_object(self, queryset=None):
    return Store.objects.get(domainKey=self.kwargs['store_domainKey'])