Django:插入时许多关系的新记录

时间:2012-12-05 14:20:57

标签: python django django-models django-forms

假设我有两个基本类,一个与另一个具有ManyToMany关系:

class Foo(models.Model):
    abc = models.TextField()
    test = models.ManyToManyField(Bar)

class Bar(models.Model):
    zyx = models.TextField()

然后我为Foo创建一个Django表单:

class FooForm(forms.ModelForm):
    class Meta:
        model = Foo
        fields = ["abc", "test"]

这将创建一个包含TextArea的表单,供我输入新Foo的{​​{1}}变量的值,以及一个列表框,将其链接到一个或多个{{1}对象。我想为这个特定表单做什么,而不是abc对象的列表框,能够​​同时创建一个(只有一个)新Bar(即显示一个第二个TextArea,其值为Bar的{​​{1}}},然后将新Bar链接到新的Bar。 ManyToMany关系稍后会出现在编辑中,但在创建时,我只想将一个zyx绑定到一个新的Bar

是否可以通过POST表单一次完成所有操作,或者我将不得不首先使用一些javascript和AJAX来创建Foo,获取其新ID,并链接新的{ {1}}那个?

1 个答案:

答案 0 :(得分:1)

是可能的,但我不确定ModelForm会为你做那件事。


但是,您可以自己轻松完成:

设置要填写的用户表单:

  • 创建一个表单,让用户输入abc可以成为ModelForm
  • 从表单中创建formset,让用户输入任意数量的zyx来创建相关的Bar个实例。 (再次,ModelForm的形式集可以)

处理POST数据时,请执行以下操作:

  1. 验证表单并且formset有效
  2. 插入新实例
  3. 将新的Bar个实例添加到新Foo的{​​{1}} ManyToMany关系

  4. 小提示:请记住Bar会返回实例!