Как получить аргумент из urls.py в views.py - PullRequest
0 голосов
/ 11 мая 2018

Итак, в настоящее время я использую представления на основе классов в Django, и у меня есть этот диспетчер URL-адресов в моем urls.py.

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.Я получал store_domainKey из urls.py в views.py, выполняя следующее в моих представлениях FBV:

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 голосов
/ 11 мая 2018

Используйте приведенный ниже код

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 (), поскольку в подробном представлении ожидайте аргумент pk в URL или любой аргумент, который он может использовать в качестве pk.

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