Имея этот фрагмент urls.py:

url(r'^storageitem/(?P<pk>[\w]+)/addtransaction/$', login_required(
    StorageItemTransactionAddView.as_view()), 
    name='storage_item_transaction'),

Мне интересно, как правильно сделать объект позади pk доступным внутри шаблона, например, чтобы показать его. с участием

<h1>{{ object.name }}</h1>

Я пытался настроить набор запросов

...
queryset = StorageItem.objects.get
    pk=get_from_kwargs()['object'])

def get_form_kwargs(self):
    kwargs = super(ItemCreate, self).get_form_kwargs()
    kwargs.update({
        'object' : self.kwargs['pk']
    })
    return kwargs

Но метод не имеет доступа к этому моменту. Поэтому мне интересно, как можно сделать это правильно? Все, что мне нужно, это что-то вроде

self.object = StorageItem.objects.get(pk='my pk')
1
frlan 27 Май 2017 в 21:51

2 ответа

Лучший ответ

Вы можете переопределить get_context_data для передачи дополнительного контекста:

...

def get_context_data(self, **kwargs):
    context = super(ItemCreate, self).get_context_data(**kwargs)
    context['storage_item'] = StorageItem.objects.get(pk=self.kwargs['pk'])
    return context
2
Aamir Adnan 4 Июн 2017 в 10:55

Почему бы просто не сделать следующее:

class StorageItemTransactionAddView(View):

    def post(self, request, pk):
        storage_item = StorageItem.objects.get(pk=pk)
        ...
        return render(request, 'myapp/index.html', {'object': storage_item})

Теперь в вашем шаблоне вы можете сделать следующее:

<h1>{{ object.name }}</h1>

Надеюсь, это поможет

0
Jahongir Rahmonov 4 Июн 2017 в 11:51