簡體   English   中英

Django:TemplateView或FormView?

[英]Django: TemplateView or FormView?

我目前正在嘗試將基於函數的視圖帶入基於類的視圖。 我目前正在苦苦掙扎的問題是我是否應該嘗試將其移動到具有FormMixin的TemplateView中,或者移至具有ContextMixin的FormView中。 您有什么技巧決定最佳選擇嗎?

def event_detail_view(request, event, organizer):
    queryset = Event.objects.filter(organizer__slug=organizer)
    event = get_object_or_404(queryset, slug=event)
    tickets = collect_all_tickets(event, organizer)
    ReserveFormSet = formset_factory(ReserveForm, formset=BaseReserveFormSet, extra=0)
    formset = ReserveFormSet(
        initial=tickets,
        # Example [{'ticket': "Early Bird"}, {'ticket': "Regular Ticket"},]
        form_kwargs={'organizer_slug': organizer}
    )
    if request.method == 'POST':
        formset = ReserveFormSet(
            request.POST,
            initial=tickets,
            form_kwargs={'organizer_slug': organizer}
        )
        if formset.is_valid():
            order_reference = unique_order_reference_generator()
            for form in formset:
                ticket_name = form.cleaned_data['ticket'].name
                int_or_empty = form.cleaned_data['quantity']
                qty = is_int_or_zero(int_or_empty)
                if qty > 0:
                    obj = form.save(commit=False)
                    obj.ticket_name = ticket_name
                    obj.order_reference = order_reference
                    obj.save()
            return redirect('organizers:index', organizer=organizer)

    ticket_status = {}
    ticket_status['sold_out'] = TicketStatus.SOLD_OUT
    ticket_status['on_sale'] = TicketStatus.ON_SALE

    return render(request, 'events/event_detail.html', {
        'event': event,
        'formset': formset,
        'ticket_status': ticket_status,
        'tickets': tickets
    })

基於類的視圖不會自動優於基於函數的視圖。 如果您具有基於函數的視圖,請仔細考慮是否要將其轉換為基於類的視圖。

Django的通用CBV並非為表單集設計。 我經常看到人們試圖在UpdateViewCreateView處理表單集,並且我認為這會導致難以理解的復雜代碼。

如果必須使用基於類的視圖來處理表單集,則可能需要查看django-extra-views ,其中包含一些可能有用的視圖。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM