gpt4 book ai didi

django:通过多个键过滤对象,一个外键模型的值对

转载 作者:行者123 更新时间:2023-12-04 02:05:43 27 4
gpt4 key购买 nike

我想知道哪种是过滤对象的最佳方法,这些对象具有一个外国模型的多个参数/值对。示例:

class Car(models.Model):
name = models.SlugField("Name")

class Parameter(models.Model):
name = models.SlugField()
value = models.TextField(blank=True)
car = models.ForeignKey('Car', related_name = 'parameters')

假设我有一些汽车具有这 3 个特定参数:(name=color, value=blue); (名称=轮胎,值(value)=固特异); (名称=座位,值(value)=皮革)

过滤所有具有这些特定参数/值组合的汽车的最佳方法是什么?我现在所做的是循环过滤一个参数/值对。但这需要很多时间,我相信有更好的方法。不知何故通过聚合也许...?

到目前为止,我让它工作的唯一方法是:

 Job.objects.filter( Q(parameters__name="tire", parameters__value="Goodyear") ).filter( Q(parameters__name="color", parameters__value="blue") ).filter( Q(parameters__name="seat", parameters__value="leather") )

最佳答案

如果我对您的理解正确,您正在寻找 OR 一些查询过滤器,默认情况下 Django AND 将所有过滤器组合在一起。要引入 ORing,您应该使用 Q 对象。在您的示例中,您需要结合使用 ANDing (&) 和 ORing (|):

from django.db.models import Q

queryset = Car.objects.filter(
(Q(parameters__name='color') & Q(parameters__value='blue')) |
(Q(parameters__name='tire') & Q(parameters__value='Goodyear')) |
(Q(parameters__name='seat') & Q(parameters__value='leather'))
)

注意从 Car 到 Parameter 的反向查找。

这应该等同于获取所有具有参数的汽车:名称=颜色和值=蓝色或参数:名称=轮胎和值=固特异或参数:名称=座椅和值=皮革。

关于django:通过多个键过滤对象,一个外键模型的值对,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25669349/

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