![](/img/trans.png)
[英]Django Class Based Views (FormView, TemplateView, DetailView) and urls
[英]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並非為表單集設計。 我經常看到人們試圖在UpdateView
或CreateView
處理表單集,並且我認為這會導致難以理解的復雜代碼。
如果必須使用基於類的視圖來處理表單集,則可能需要查看django-extra-views
,其中包含一些可能有用的視圖。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.