Django:仅将外键约束到具有相同id的行

问题描述 投票:0回答:1

对于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

python sql django postgresql django-models
1个回答
0
投票

你不是在寻找one-to-one relationship吗?

  • userChild只能设置为一个User
  • childUser也只能设置为一个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)

如果您需要覆盖更精细的点(例如,如果您需要在一个方向上定义关系而不在另一个方向上定义关系),请澄清用例。

© www.soinside.com 2019 - 2024. All rights reserved.