gpt4 book ai didi

python - 具有可过滤属性的 Django 模型

转载 作者:行者123 更新时间:2023-11-29 01:02:23 25 4
gpt4 key购买 nike

我有两个模型。一个代表一件装备,另一个代表装备可能具有的属性。从语义上讲,这可能看起来像:

  • 设备:拖拉机,属性:轮子牵引
  • 设备:割草机,属性:轮子 Blade
  • 装备:hedgetrimmer,属性: Blade

我想做这样的查询,

wheels = Attributes.objects.get(name='wheels')
blades = Attributes.objects.get(name='blades')

Equipment.objects.filter(has_attribute=wheels) \
.exclude(has_attribute=blades)

我如何创建 Django 模型来执行此操作?

这看起来很简单,但我太笨了,看不到正确的解决方案。

我想到的一个解决方案是将 Attribute ID 列表编码为整数列表,如 |109|14|3 并使用 测试属性>Equipment.objects.filter(attributes_contains='|%d|' % id)——但这似乎真的是错误的。

最佳答案

您的第二个示例非常接近,但您需要了解 QuerySet API works across relationships (i.e. joins) .

class Attribute(models.Model):
name = models.CharField(max_length=20)

class Equipment(models.Model):
name = models.CharField(max_length=20)
attributes = models.ManyToManyField(Attribute)

equips = Equipment.objects.filter(
attributes__name='wheels').exclude(attributes__name='blades')

您可以在 QuerySet 中使用 Q 对象来进行更有趣的查询。

请记住,您始终可以像这样从 QuerySet 中转储 SQL:

print equips.query.as_sql()

有时您会希望查看生成的确切 SQL 以确保您正确使用了 API。

关于python - 具有可过滤属性的 Django 模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2211631/

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