gpt4 book ai didi

python - CheckConstraint 的 Q 对象

转载 作者:行者123 更新时间:2023-12-05 02:52:25 24 4
gpt4 key购买 nike

我正在尝试编写一个 Q 对象来表示

Either one of these 4 fields is not null, or this field is not true

我有一个包含 4 类价格和可用标志的标准化表格

price_A
price_B
price_C
price_D
available_on_the_store

我希望至少填充其中一个价格,然后才能在带有 Q 对象的 CheckConstraint 上将其标记为 available_on_the_store

我可以很容易地用一个巨大的 Q 链来做到这一点,或者可以很容易地将它写在 .clean() 中并在 python 端强制它,但我希望它在数据库级别;所以请相应地回答。

最佳答案

你可以这样写:

  Q(available_on_the_store=False) |
Q(price_A__isnull=False) |
Q(price_B__isnull=False) |
Q(price_C__isnull=False) |
Q(price_D__isnull=False)

或者我们可以把它写得更短:

Q(
('available_on_the_store', False),
('price_A__isnull', False),
('price_B__isnull', False),
('price_C__isnull', False),
('price_D__isnull', False),
<b>_connector=Q.OR</b>
)

因此,您可以制作如下所示的模型:

class MyModel(models.Model):
# …

class Meta:
constraints = [
models.CheckConstraint(
Q(
('available_on_the_store', False),
('price_A__isnull', False),
('price_B__isnull', False),
('price_C__isnull', False),
('price_D__isnull', False),
_connector=Q.OR
),
name='one_price_not_null_if_avaiable'
)
]

关于python - CheckConstraint 的 Q 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62615913/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com