我是一名学习者,正在通过使用django进行会计核算来学习django。
我想知道如何将基于关键类的详细视图转换为基于函数的视图
这是我要转换的代码:
class ledger1DetailView(LoginRequiredMixin,DetailView):
context_object_name = 'ledger1_details'
model = ledger1
template_name = 'accounting_double_entry/ledger1_details.html'
def get_object(self):
pk1 = self.kwargs['pk1']
pk2 = self.kwargs['pk2']
get_object_or_404(company, pk=pk1)
ledger = get_object_or_404(ledger1, pk=pk2)
return ledger
def get_context_data(self, **kwargs):
context = super(ledger1DetailView, self).get_context_data(**kwargs)
context['journal_list'] = journal.objects.all()
context['company_list'] = company.objects.all()
journal_details = get_object_or_404(journal, pk=self.kwargs['pk'])
context['Debitcount'] = journal_details.debitsum()
context['company_list'] = journal_details.creditsum()
company_details = get_object_or_404(company, pk=self.kwargs['pk1'])
context['company_details'] = company_details
return context
这是我的urls.py:
url(r'^company/(?P<pk1>\d+)/ledgerdetail/(?P<pk2>\d+)/$',views.ledger1DetailView.as_view(),name='ledgerdetail'),
所以您可以了解pk1和pk2是什么...而pk是日记帐对象的ID ...我想传递我在ledger1detailview的日记帐模型中执行的某些功能...
如果有人知道该怎么做...请帮助
谢谢
答案 0 :(得分:2)
首先,您需要编写函数签名。由于它是一个函数,而不是一个类,因此建议的名称更改为ledger1_detail_view
。 login_required
装饰器与LoginRequiredMixin
做相同的工作。
然后,您需要获取对象。这类似于get_object
中的代码。请注意,您不再有self.kwargs
,而函数签名中有pk1
和pk2
。
然后,您需要构建上下文字典。这将类似于您的get_context_data
方法。
最后,您可以使用render
快捷方式来呈现模板。
将其放在一起,视图的结构将为:
from django.contrib.auth.decorators import login_required
@login_required
def ledger1_detail_view(request, pk1, pk2):
get_object_or_404(company, pk=pk1)
ledger = get_object_or_404(ledger1, pk=pk2)
context = {}
context['ledger1_details'] = ledger
# Add other items to the context
...
return render(request, 'accounting_double_entry/ledger1_details.html', context)
记住要更改您的网址格式以使用新视图:
url(r'^company/(?P<pk1>\d+)/ledgerdetail/(?P<pk2>\d+)/$', views. ledger1_detail_view, name='ledgerdetail'),