2013-01-04 39 views
0

我有4個模型,我需要一次存儲數據。爲此,我在考慮使用ModelForms。Django - 如何在同一個表單中使用多個ModelForm?

我已經測試了2個ModelForm的同時,但它不工作。這是代碼。

型號:

class Main(models.Model): 
    section    = models.ForeignKey(Section) 
    user    = models.ForeignKey(User) 
    title    = models.CharField(max_length=250) 
    date_inserted  = models.DateTimeField(auto_now_add=True) 
    date_last_update = models.DateTimeField(auto_now=True) 

    def __unicode__(self): 
    return self.title 

    # To order in the admin by name of the section 
    class Meta: 
    ordering = ['date_inserted'] 


class BicycleAd(models.Model): 
    main    = models.ForeignKey(Main) 
    bicycleadtype  = models.ForeignKey(BicycleAdType) 
    bicycleaditemkind = models.ForeignKey(BicycleAdItemKind) # MPTT Model 
    bicycleadcondition = models.ForeignKey(BicycleAdCondition) 
    country    = models.ForeignKey(GeonamesCountry)  
    city    = models.ForeignKey(GeonamesLocal) 
    date_inserted  = models.DateTimeField(auto_now_add=True) 
    date_last_update = models.DateTimeField(auto_now=True) 

    # To order in the admin by name of the section 
    class Meta: 
    ordering = ['date_inserted'] 

形式:

class MainForm(forms.ModelForm): 
    class Meta: 
    model = Main 
    exclude = ('user', 'section') 

class BicycleAdForm(forms.ModelForm): 
    class Meta: 
    model = BicycleAd 
    exclude = ('main', 'bicycleadtype', 'bicycleaditemkind', 'bicycleadcondition', 'city') 

查看:

def submit_data_entry_view(request): 
    form_main  = MainForm(request.POST) 
    form_bicyclead = BicycleAdForm(request.POST) 

    return render_to_response('app/submit_data_entry.html', {'form_main': form_main, 'form_bicyclead': form_bicyclead}, context_instance=RequestContext(request)) 

模板:

<form method="post" action=""> 
    {{form_main}} 
    {{form_bicyclead}} 
</form> 

最後我只得到瀏覽器中輸出的「form_bicyclead」?我怎樣才能一次獲得這兩種表格?

最好的問候,

+0

你使用的是什麼版本的Django? –

+0

嗨!我正在使用1.4.2 –

+0

然後,我會懇求您重新訪問您的代碼並使用基於類的視圖對其進行更新,它們需要一點學習,但是當您掌握它們時,它們確實會發光。只是一個提示,我會看看如果我能回答你的答案! :) –

回答

3

您使用submit_data_entry_view呈現形式嗎?它不應該像 -

def submit_data_entry_view(request): 

    if request.method == 'POST': #form submit 
     form_main  = MainForm(request.POST) 
     form_bicyclead = BicycleAdForm(request.POST) 

     #now process and save the form 

     return <whatever_you_want> 
    elif request.method == 'GET': #first time rendering the form 
     form_main  = MainForm() 
     form_bicyclead = BicycleAdForm() 

     return render_to_response('app/submit_data_entry.html', {'form_main': form_main, 'form_bicyclead': form_bicyclead}, context_instance=RequestContext(request)) 
+1

感謝您的回覆。這是工作。 –

相關問題