我在Django中有两个模型:
A:
b = ForeignKey("B")
B:
a = ForeignKey(A)
我希望这些ForeignKeys为非NULL。
但是,我无法创建对象,因为在我save()之前它们没有PrimaryKey。但是如果没有其他对象PrimaryKey我就无法保存。
如何创建相互引用的A和B对象? 如果可能,我不想允许NULL。
答案 0 :(得分:0)
如果这确实是一个引导问题而不是在正常使用期间会再次出现的问题,那么您可以创建一个夹具,用一些初始数据预先填充数据库。夹具处理代码包括数据库层的解决方法,以解决转发引用问题。
如果它不是引导问题,并且你想要在新对象之间定期创建这些循环关系,你应该重新考虑你的模式 - 其中一个外键可能是不必要的。
答案 1 :(得分:0)
听起来你在谈论一对一的关系,在这种情况下,不必在两个表上存储外键。实际上,Django在ORM中提供了很好的帮助器来引用相应的对象。
使用Django的OneToOneField
:
class A(models.Model):
<snip>
class B(models.Model):
a = OneToOneField(A)
然后您可以像这样简单地引用它们:
a = A()
a.save()
b = B(a=a)
b.save()
print a.b
print b.a
此外,您可以查看django-annoying的AutoOneToOneField
,如果实例上不存在关联对象,则会在保存时自动创建该关联对象。
如果你的问题不是一对一的关系,你应该澄清一下,因为几乎可以肯定有一种更好的方法来建模数据而不是相互的外键。否则,无法避免在保存时设置必填字段。