在我的Django应用中,我有两个类似的模型:
class Foo(models.Model):
name = models.CharField(max_length=10)
bar = models.ForeignKey(Bar)
class Bar(models.Model):
class descr = models.CharField(max_length=50)
我想要一个Foo的ModelForm,这很容易。但是,我希望能够创建Foo
分别绑定到不同Bar
实例的多个实例。因此,假设我有三个Bar
实例,我想有一个模型表单,该模型表单只有一个表单并且在一个提交上创建三个Foo
实例,每个实例分别将新Foo
实例链接到我的一个Bar
实例。
基本上,我正在做的是Foo的“批量创建”。我不想使用多对多,因为我不想将一个Foo对象绑定到三个Bar对象。我希望每个Bar都有自己独特的Foo。
我认为可以使用ModelForm,并在实例化它时,可能向Bar实例添加一些引用,然后save()
在该Modelform上重写以创建“重复”条目。我的模型窗体不包含该bar
字段,因为我将手动处理它。
这看起来像是正确的方法吗?有什么陷阱吗?其他设计方法?
它并不像您想的那么复杂。在django中,将对象的id设置为null并再次保存时,django将创建一个与第一个实例相同的新实例。因此,您可以大致执行以下操作:
form = FooForm(request.POST or None)
if form.is_valid():
new_foo = form.save()
new_foo.id = None
# this will create another instance
new_foo.save()
您的方法有一个陷阱,您应该尽量避免覆盖模型/模型形式save()
方法,它会弄乱很多事情和/或使事情变得复杂。如果你想保存与型号,使用Django额外的步骤东西pre_save
或post_save
信号。如果您想使用模型形式做某事,请根据需要进行obj = form.save(commit=False)
更改obj
,然后执行obj.save()
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句