假设我有一个模型,例如:
class Topic(models.Model):
date = models.DateField(null=False, blank=False)
subject = models.ForeignKey(Subject, blank=False, null=False, on_delete=models.CASCADE)
topic_id = models.PositiveIntegerField(null=False, blank=False)
aggregate_difficulty = models.PositiveIntegerField(null=False, blank=False)
class Meta:
constraints = [models.UniqueConstraint(fields=["subject", "date", "topic_id"], name="topic_unique")]
我们还有另一个模型,例如:
class Module(models.Model):
date = models.DateField(null=False, blank=False)
subject = models.ForeignKey(Subject, blank=False, null=False, on_delete=models.CASCADE)
topic_id = models.PositiveIntegerField(null=False, blank=False)
content = models.TextField()
difficulty = models.PositiveIntegerField(null=False, blank=False)
如何使用以下三个字段创建从module
到topic
的外键关系:date
、subject
和topic_id
?
我希望使用这种格式,这样插入数据库的人就不必在插入模块表之前找出自动生成的主题ID。
一个主题有许多模块,一个主题有许多主题。
1条答案
按热度按时间yr9zkbsy1#
像这样改变你的关系:
然后,您可以检查
subject
是否为topic
,如下所示:或者查找给定模块的所有主题:
如果您将主题模型更改为这样,您可以验证
topic
上的任何subject
必须与模块上的subject
匹配,如下所示:最后,
date
字段不是另一个模型,所以您不需要foriegn键关系,您实际上只需要一个惟一的together约束,您已经实现了这个约束。