0

在我的 django 应用程序中,我有两个处于一对多关系的模型:TermTermName(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不能为空。但是,如果我想TermName事先创建“参考”,也一样;它现在抱怨term为空...

我的解决方法是让ref_termname为空(即使用null=True字段选项)。但是对于我的模型设计,我想让它不能为空。这可能吗?

感谢您的帮助!

4

1 回答 1

0

如果你把你的模型移到你OneToOneFieldTermName模型上怎么办?我想你可以这样建模:

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指向 a 的 s Term。唯一的缺点是Terms 不是强制的TermName

于 2019-07-12T23:55:36.517 回答