python - Django:将外键限制为仅具有相同ID的行
问题描述
对于一个 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
解决方案
你不是在寻找一对一的关系吗?
user
inChild
只能设置为一个User
。child
inUser
也只能设置为一个Child
。- 你想要
user
inChild
和child
inUser
指向对方。
这正是一对一的关系。以下代码比您当前的代码更简单,它在数据库级别强制执行约束:
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)
如果您需要涵盖更精细的点(例如,如果在某些情况下您需要在一个方向而不是在另一个方向定义关系),那么请澄清用例。
推荐阅读
- c - How to concant values of loop into variable for returning in C
- java - Playstore Android 预发布测试致命异常:ControllerMessenger
- java - 在 Android Studio 中更改 webView 内容
- r - individuating rows based on conditions in nested data
- c - 我的链表中的每个节点都包含最终值 - 如何修复?
- html - Bootstrap 3: How to precisely center text under a circular image?
- certificate - How to use pfx certificate in postman?
- azure - How can I retrieve files within a repo in Azure within a Powershell script?
- python - Gurobi 和 gurobipy - 使用 Python 日志记录时输出控制台加倍
- java - 将字符串转换为 JTextArea