【发布时间】:2018-11-24 05:59:12
【问题描述】:
我目前正在尝试将基于函数的视图带入基于类的视图中。我目前正在努力解决的问题是我是否应该尝试将其移动到带有 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
})
【问题讨论】:
-
FormView已经使用ContextMixin,您不必“与”FormView一起使用。
标签: python django django-forms django-class-based-views