Django - 保存一个新的table1.PK和table2.PK和table2.FK
问题描述:
我创建了2个基于django-crispy形式的表单。Django - 保存一个新的table1.PK和table2.PK和table2.FK
- Form1中示出了OrderHeader
- 窗体2示出了在一个formset
当我打开现有OrderHeader,我看到页眉和线路中的OrderLines,我可以调节和保存打开的形式只是精细。
当我打开表单为空时,我在OrderHeader中选择一个客户,然后添加一些订单行,但在这里我无法保存,因为OrderLine没有OrderLine.orderheader的FK值。
问:如何在OrderLine.orderheader中保存OrderHeader.pk当我点击提交?
我views.py
def orderline_formset(request, id=None):
if id:
orderid = OrderHeader.objects.get(pk=id)
else:
orderid = OrderHeader()
OrderLineFormSet = inlineformset_factory(OrderHeader, OrderLine, OrderLineForm, extra = 1, can_delete=True)
form = OrderHeaderForm(instance=orderid)
formset = OrderLineFormSet(instance=orderid)
helper = OrderLineFormSetHelper()
if request.method == 'POST':
OrderLine.orderheader = orderid
formset = OrderLineFormSet(request.POST,instance=orderid)
if formset.is_valid():
formset.save()
messages.success(request, 'Order saved succesfully!')
else:
messages.error(request, 'Order save error, please check fields below')
else:
formset = OrderLineFormSet(instance=orderid)
return render_to_response("order.html", {'orderform' : form,'formset': formset, 'helper': helper},
context_instance=RequestContext(request))
我forms.py
class OrderHeaderForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(OrderHeaderForm, self).__init__(*args, **kwargs)
self.helper = FormHelper(self)
self.helper.form_tag = False
class Meta:
model = OrderHeader
class OrderLineForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(OrderLineForm, self).__init__(*args, **kwargs)
class Meta:
model = OrderLine
class OrderLineFormSetHelper(FormHelper):
def __init__(self, *args, **kwargs):
super(OrderLineFormSetHelper, self).__init__(*args, **kwargs)
self.form_method = 'post'
self.template = 'bootstrap3/table_inline_formset.html'
self.render_required_fields = True
self.form_tag = False
答
的错误是,我是唯一保存表单集,而不是形式。所以我改变了我的views.py到以下;
if request.method == 'POST':
form = OrderHeaderForm(request.POST,instance=orderid)
formset = OrderLineFormSet(request.POST,instance=orderid)
if form.is_valid() and formset.is_valid():
form.save()
formset.save()
messages.success(request, 'Order saved succesfully!')