Python 具有可过滤属性的Django模型

Python 具有可过滤属性的Django模型,python,sql,mysql,django,django-models,Python,Sql,Mysql,Django,Django Models,我有两个模型。一个代表一件设备,另一个代表设备可能具有的属性。从语义上讲,这可能看起来像: 设备:拖拉机,属性:车轮,牵引 设备:割草机,属性:轮子,刀片 设备:hedgetrimmer,属性:Blade 我想问一下 wheels = Attributes.objects.get(name='wheels') blades = Attributes.objects.get(name='blades') Equipment.objects.filter(has_attribute=wheel

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

  • 设备:
    拖拉机
    ,属性:
    车轮
    牵引
  • 设备:
    割草机
    ,属性:
    轮子
    刀片
  • 设备:
    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模型来实现这一点?

这看起来很简单,但我太过密集,看不到正确的解决方案


我脑海中闪现的一个解决方案是将
属性
id列表编码成一个整数列表,如
|109 | 14 | 3
,并使用
设备.objects.filter(attributes_contains='|%d |“%id)
,测试属性(attributes_包含='',但是你需要了解这个过程是如何进行的

您可以在查询集中使用Q对象来执行更有趣的查询

请记住,您始终可以从查询集中转储SQL,如下所示:

print equips.query.as_sql()

有时,您需要查看生成的确切SQL,以确保正确使用API。

您的第二个示例非常接近,但您需要了解SQL是如何生成的

您可以在查询集中使用Q对象来执行更有趣的查询

请记住,您始终可以从查询集中转储SQL,如下所示:

print equips.query.as_sql()
有时,您需要查看生成的确切SQL,以确保正确使用API