如何在基于类的FormView使用的模板中显示当前对象

时间:2017-05-27 18:51:30

标签: python django formview

有这个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')

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

为什么不简单地执行以下操作:

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>

希望有所帮助