对于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
你不是在寻找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)
如果您需要覆盖更精细的点(例如,如果您需要在一个方向上定义关系而不在另一个方向上定义关系),请澄清用例。