在我的django应用程序中,我有两个一对多关系的模型:Term
和TermName
(Term
有很多TermName
)。我想跟踪特定Term
实例的TermName
,说TermName
模型是名称别名或相关的Term
模型,但是其中之一是“引用”名称别名。为此,我在两个模型之间添加了一对一的关系。这是代码:
class TermName(models.Model):
name = models.CharField(max_length=255)
term = models.ForeignKey(
'Term',
on_delete=models.CASCADE
)
class Term(models.Model):
ref_termname = models.OneToOneField(
TermName,
on_delete=models.DO_NOTHING,
related_name = 'reference_of_term',
)
问题是如果我创建一个新的Term
实例,django抱怨ref_termname
不能为null。但是,如果我想事先创建“引用” TermName
,情况也会一样;现在它抱怨term
为空...
我的解决方法是让ref_termname
为空(即使用null=True
字段选项)。但是对于我的模型设计,我想使其不为空。可以吗?
感谢您的帮助!
答案 0 :(得分:0)
如果将OneToOneField
移至TermName
模型怎么办?我认为您可以按以下方式建模:
class TermName(models.Model):
name = models.CharField(max_length=255)
term = models.ForeignKey(
'Term',
on_delete=models.CASCADE
)
reference_of_term = models.OneToOneField(
TermName,
on_delete=models.PROTECT,
related_name = 'ref_termname',
)
class Term(models.Model):
pass
现在,您应该能够首先创建Term
的实例,然后创建指向TermName
的{{1}}。唯一的缺点是Term
不会被迫拥有Term
。