【发布时间】:2019-07-29 10:21:36
【问题描述】:
所以我有一个关于 django-extra-views 的 form_valid 的问题。我使用 CreateWithInlinesView 方法创建了一个包含多个内联表单集的表单。
名为“订单”的基本表单包含两个不同的表单集,“预订”和“付款”。订单始终必须包含至少一个预订,但不一定需要在创建订单时进行付款。
付款表格仍然会生成。我想在“payment_amount”> 0 上验证付款表单。如果在创建订单时没有付款,则不应保存 PaymentInline。
views.py
class BookingInline(InlineFormSetFactory):
model = Booking
form_class = BookingForm
prefix = 'booking_formset'
factory_kwargs = {
'extra': 0,
'min_num': 1,
'validate_min': True,
'can_delete': True
}
class PaymentInline(InlineFormSetFactory):
model = Payment
form_class = PaymentForm
prefix = 'payment_formset'
factory_kwargs = {
'extra': 1,
'min_num': 0,
'validate_min': False,
'can_delete': True
}
class OrderCreateView(NamedFormsetsMixin, CreateWithInlinesView):
model = Order
inlines = [BookingInline, PaymentInline]
inlines_names = ['booking_formset', 'payment_formset']
form_class = OrderForm
template_name = 'orders/order_form.html'
def get_success_url(self):
return reverse_lazy('order_detail', kwargs={'pk': self.object.pk})
def forms_valid(self, form, inlines):
"""
If the form and formsets are valid, save the associated models.
"""
self.object = form.save(commit=False)
self.object.created_by = self.request.user
form.save(commit=True)
for formset in inlines:
formset.save()
return HttpResponseRedirect(self.get_success_url())
因此,逻辑需要类似于以下内容,尽管我收到一条错误消息,指出“订单”对象没有“付款”属性,因为它是反向关系...
views.py
def forms_valid(self, form, inlines):
"""
If the form and formsets are valid, save the associated models.
"""
self.object = form.save(commit=False)
self.object.created_by = self.request.user
form.save(commit=True)
for booking_formset in inlines:
booking_formset.save()
for payment_formset in inlines:
if self.object.payment.amount > 0:
payment_formset.save()
else:
pass
return HttpResponseRedirect(self.get_success_url())
有人知道如何处理表单中的不同表单集吗?
提前致谢!
【问题讨论】:
标签: django forms validation inline-formset