【问题标题】:Django - How to work with multiple ModelForm's in the same form?Django - 如何以相同的形式使用多个 ModelForm?
【发布时间】:2013-01-04 10:16:48
【问题描述】:

我有 4 个模型需要同时存储数据。为此,我正在考虑使用 ModelForms。

我同时测试了 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”?我怎样才能同时获得这两个表格?

最好的问候,

【问题讨论】:

  • 你使用的是什么版本的 Django?
  • 那么我恳请您重新审视您的代码并使用基于类的视图对其进行更新,它们需要一些学习,但当您掌握它们时它们确实会发光。只是一个提示,我会看看我是否可以回复你! :)
  • 我建议在单个页面上呈现多个表单时对每个表单使用prefix 选项,以避免不同模型之间的字段名称冲突的可能性。请参阅docs.djangoproject.com/en/dev/ref/forms/api/…(这不应该在这里引起您的问题,只是另一个提示)。

标签: python django modelform django-forms


【解决方案1】:

您是否也在使用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))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-02-13
    • 2016-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-21
    相关资源
    最近更新 更多