2014-10-17 3 views
-2

장고 - 싱 싱 양식을 기반으로 2 개의 양식을 만들었습니다.Django - 새 table1.PK 및 table2.PK 및 table2.FK 저장

  1. Form1이, 내가 조정하고 개방 형태를 바로 저장할 수 있습니다
  2. Form2를 내가 기존 OrderHeader를 열 때

, 난 헤더와 라인을 참조하십시오 해당 formset에서 OrderLines을 보여줍니다 OrderHeader를 보여줍니다 벌금.

양식을 비우면 OrderHeader에서 고객을 선택한 다음 일부 주문 행을 추가하지만 여기서는 OrderLine이 OrderLine.orderheader에 대한 FK 값이 없으므로 저장할 수 없습니다.

Q : Submit를 누르면 어떻게 OrderHeader.pk를 OrderLine.orderheader에 저장할 수 있습니까?

내 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 

답변

0

오류가 난 경우에만 해당 formset 아닌 양식을 저장 한 것이 었습니다. 그래서 나는 내 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!')