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

How to show current object inside template used with class based 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')

您可以覆盖 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

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

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>

希望对您有所帮助