如何在基于函数的视图中转换基于 class 的详细视图?
How to convert class based detail view in function based view?
我是一名学习者,我正在通过使用 django 做一个会计应用程序来学习 django。
我想知道如何将基于关键 class 的详细视图转换为基于函数的视图
这是我要转换的代码:
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 中的日志模型中执行的一些功能...
如果有人知道怎么做...请帮助
谢谢
首先,您需要编写函数签名。由于它是一个函数而不是 class,建议的名称更改为 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 模式以使用新视图:
url(r'^company/(?P<pk1>\d+)/ledgerdetail/(?P<pk2>\d+)/$', views. ledger1_detail_view, name='ledgerdetail'),
我是一名学习者,我正在通过使用 django 做一个会计应用程序来学习 django。
我想知道如何将基于关键 class 的详细视图转换为基于函数的视图
这是我要转换的代码:
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 中的日志模型中执行的一些功能...
如果有人知道怎么做...请帮助
谢谢
首先,您需要编写函数签名。由于它是一个函数而不是 class,建议的名称更改为 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 模式以使用新视图:
url(r'^company/(?P<pk1>\d+)/ledgerdetail/(?P<pk2>\d+)/$', views. ledger1_detail_view, name='ledgerdetail'),