假设我有两个基本类,一个与另一个具有多对多关系:
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
的 abc
变量的值,以及一个将其链接到一个列表框或多个 Bar
对象。我想对这种特定的表单做的是,能够同时创建一个(且只有一个)新的 Bar
,而不是 Bar
对象的列表框时间(即,显示 Bar
的 zyx
值的第二个 TextArea),然后将新的 Bar
链接到新的 Foo
。 ManyToMany 关系稍后在编辑时出现,但在创建时,我希望将一个 Bar
与一个新的 Foo
绑定(bind)。
是否可以通过发布表单一次性完成这一切,或者我是否必须使用一些 javascript 和 AJAX 首先实际创建 Bar
,获取其新 ID,然后链接新的 Foo
呢?
最佳答案
这是可能的,但我不确定 ModelForm
是否可以为您做到这一点。
但是,您可以轻松地自己完成:
设置用户填写的表单:
- 创建一个表单以让用户输入
abc
(可以是ModelForm
) - 创建 formset表单允许用户输入任意数量的 zyx 来创建相关的 Bar 实例。 (同样,
ModelForm
的表单集是可以的)
处理POST
数据时,执行以下操作:
- 验证表单和表单集是否有效
- 插入新实例
- 将新的
Bar
实例添加到新的Foo
的Bar
ManyToMany 关系
小提示:记住 ModelForm.save
返回实例!
关于python - Django:插入时多对多关系的新记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13725304/