我正在用Django ORM编写一个查询,返回所有有技能集的人。
例如:拥有“语言==英语”和“角色==管理器”的所有人
SQL查询的示例如下:
select person.name
from person
where exists
(select *
from skill
where skill.id = person.id
and ((skill.type = 'language' and skill.value = 'English') and \
(skill.type = 'role' and skill.value = 'Manager')))我在Django中有一个结构类模型
class Person(models.Model):
name = models.CharField(max_length=60)
age = models.IntegerField()
class Skill(models.Model):
type = models.CharField(max_length=20)
value = models.CharField(max_length=30)
persons = models.ManyToManyField(Person)桌子上的记录
| name | age |
|--------|-----|
| Arnold | 23 |
| Bull | 24 |
| John | 25 |桌上技能记录
| type | value | persons |
|----------|------------|--------------|
| role | Customer | John, Bull |
| role | Manager | John |
| language | English | Bull, Arnold |
| language | Portuguese | John, Bull |用例:
是否有可能构建一个参与这些用例的查询?
发布于 2015-11-09 17:39:19
这应该是可行的:
Person.objects.filter(skill__type='role', skill__value='Customer')您可以使用“__”符号访问相关对象属性。
https://stackoverflow.com/questions/33614531
复制相似问题