2013-02-28 51 views
0

我为了节省一些打字发与外键的模型,我认为这也是看起来比较清爽这样:的Django与外国主要

class Model_Sub(models.Model): 
    some_fields 

class Model_Main(models.Model): 
    field_1 = models.ForeignKey(Model_Sub, related_name="sub_field_1") 
    field_2 = models.ForeignKey(Model_Sub, related_name="sub_field_2") 

但是,当我希望我的用户提交窗体,我想要新的实例的子模型,而不是从查询集。我希望Model_Sub可以作为表单与主模型无缝集成。无论如何,使用ModelForm来实现这一点?

感谢您的帮助

大卫

+0

是'Model_Sum'求和函数,还是你指的是'Model_Sub'? – Cole 2013-02-28 21:37:37

+0

对不起,我指的是Model_Sub。修复。 – dajee 2013-02-28 21:47:53

+0

所以你想要一个可以将其值保存到一个新的外键实例的表单? – Cole 2013-02-28 21:57:47

回答

2

我想你想使用两种型号的形式从Model_Sub类,然后使用它们来创建你的Main_Model对象

class SubForm(models.ModelForm): 
    class Meta: 
     model = Sub_Model 

def your_view(request): 
    if request.method == 'POST': 
     form1 = SubForm(request.POST, prefix='no1') 
     form2 = SubForm(request.POST, prefix='no2') 
     if form1.is_valid() and form2.is_valid(): 
      main_model = Main_Model(field1 = form1.save(), 
            field2 = form2.save()) 
      main_model.save() 
      #... 
    else: 
     form1 = SubForm(prefix = 'no1') 
     form2 = SubForm(prefix = 'no2') 
    return render(request, 'your_template.html', {'form1': form1, 
                'form2': form2}) 
+0

+1您是否在'your_view'中指'form2 = SubFo ....'? – Cole 2013-02-28 22:22:55

+0

ahh是的,我担心我必须做这样的事情,我的模型里有更多的东西,因为它是为了我的大学的数据收集,我只是不知道是否有一个漂亮的Django的技巧,我可以用它来做到这一点。无论有用,+1。感谢您的帮助 – dajee 2013-02-28 22:42:52

+0

@Cole,谢谢,我编辑了我的文章 – 2013-02-28 23:24:13