对于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
答案 0 :(得分:0)
您不是要寻找one-to-one relationship吗?
user
中的Child
仅可以设置为一个User
。child
中的User
也只能设置为一个Child
。user
中的Child
和child
中的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)
如果您需要讲一点,例如在某些情况下需要在一个方向上定义关系而在另一个方向上没有定义关系,那么请说明用例。