2013-06-18 157 views
0
動態表單

我有以下型號與外鍵在Django

class Make(models.Model): 
    make_name = models.CharField(max_length=32) 
    def __unicode__(self): 
     return self.book_title 

class MakeModel(models.Model): 
    model_number = models.IntegerField() 
    model_capacity = models.IntegerField() 
    model_capacity_unit = models.CharField(max_length=4) 
    Make = models.ForeignKey(Make) 
    def __unicode__(self): 
      return self.model_number 

基本上,我希望我的形式有頂部的所有制作細節,並在下方的網格中的所有MakeModel細節,並能夠輕鬆添加更多的MakeModels。如本樣機

https://www.dropbox.com/s/e7rg3zxe6y8q9fi/invoicedetails.gif

任何想法,需要做些什麼事情?人們提到像inlineformset_factory這樣的東西,但我並不確信如何使用它,或者它能做我期望的事情。

任何幫助,將不勝感激

回答

2

您需要一個窗體和一個formset。

  • 一種形式:一種形式
  • 一個formset:一種形式的多個副本

你的看法會是這個樣子的POST週期:

更新:哦不對,外鍵。說實話的最簡單的方法就是commit = False formset並手動分配FK。你也可以使用一個inlineformset。 https://docs.djangoproject.com/en/dev/ref/forms/models/#django.forms.models.inlineformset_factory

FormSet = modelformset_factory(MakeModel) 
Form = modelform_factory(Make) 

def myview(request): 
    formset = FormSet(request.POST or None) 
    form = Form(request.POST or None) 

    if request.method == 'POST':    
     if formset.is_valid() and form.is_valid(): 
      main_instance = form.save() 
      formset.save(commit=False) 
      for instance in formset: 
       instance.fk = main_instance 
       instance.save() 

https://docs.djangoproject.com/en/dev/topics/forms/formsets/

+1

你是個明星,謝謝。我仍然需要做一些遊戲,但我覺得我很擔心。 – user2167177