Как преобразовать детальный вид на основе классов в функциональный вид? - PullRequest
0 голосов
/ 02 октября 2018

Я учащийся. Я изучаю 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 это идентификатор дляобъекты журнала ... Я хочу передать некоторую функцию, которую я выполнил в модели журнала, в ledger1detailview ...

Если кто-нибудь знает, как это сделать ... plz help

Спасибовы

1 Ответ

0 голосов
/ 02 октября 2018

Для начала нужно написать подпись функции.Поскольку это функция, а не класс, рекомендуемое имя меняется на 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'),
...