Django:将外键限制为仅具有相同ID的行

时间:2019-03-05 10:59:36

标签: python sql django postgresql django-models

对于Django项目,我有两种模型:

class User(AbstractUser):
    child = models.ForeignKey('children.Child', null=True, on_delete=models.SET_NULL)

以及以下内容:

class Child(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)

我想要的是User.child只能设置为具有child.user_id = user.id的实体,最好有一个约束。这可能吗?如果有关系,我正在使用PostgreSQL

1 个答案:

答案 0 :(得分:0)

您不是要寻找one-to-one relationship吗?

    user中的
  • Child仅可以设置为一个User
  • child中的
  • User也只能设置为一个Child
  • 您希望user中的Childchild中的User指向彼此。

这正是一对一关系。以下代码比您当前的代码还要简单,它在数据库级别强制执行约束:

class User(AbstractUser):
    # The relationship only needs to be defined in one of the models
    pass

class Child(models.Model):
    user = models.OneToOneField(User, null=True, on_delete=models.CASCADE)

如果您需要讲一点,例如在某些情况下需要在一个方向上定义关系而在另一个方向上没有定义关系,那么请说明用例。