django - 用于验证 1 个字段与 Django 中的另一个字段的数据库级别约束
问题描述
有没有办法在模型(models.CheckConstraint
类)中使用 Django 约束来创建一个约束来验证一个字段的值与另一个字段的值?
例如:
class Season(models.Model):
last_watched_episode = models.PositiveSmallIntegerField(
null=True,
)
number_of_episodes = models.PositiveSmallIntegerField(
)
last_watched_episode
在这种情况下,我需要做一个约束,如果字段的值大于字段,则会引发错误number_of_episodes
。例如 9 > 8。另外,如果应该省略if last_watched_episode is Null
( none ) 约束(不能比较Null和int)
我已经有模型和序列化验证器,但目标是创建数据库级别的约束。也可以使用 RAW SQL 和自定义迁移来创建它,但最好通过 DJANGO 约束。谢谢你。数据库-postgres 12
解决方案
发现可以F
在约束中使用:
class Meta:
constraints = [
models.CheckConstraint(name='mutual_watched_episode_and_number_of_episodes_check',
check = (models.Q(number_of_episodes__gte=models.F('last_watched_episode')))
),
]
这样工作
推荐阅读
- facebook-graph-api - 自定义文本和图像的 Facebook 共享不适用于 fb.ui 打开图形
- javascript - 如何发出 PUT API HTTPS 请求 [reactJS]
- react-native - 运行反应本机项目时如何修复我的模拟器中的未知错误
- react-native - 无法在 Redux 中访问切片的 initialState,因此我不得不求助于手动设置状态属性
- if-statement - 从下拉列表中替换 Google 表格中的字符串
- django - 仅当具有外键的子项具有记录时才获取模型的结果
- c# - iOS 9.3 中的 FilePicker 异常
- r - 在 R 的 For 循环中创建和更新 List 的元素
- javafx - JavaFX Node.snapshot(..) 可以一起捕获 ComboBox 及其弹出窗口吗?
- python - PyQt 在处理事件时避免陷入无限循环