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