我正在Django ORM中编写一个返回所有具有技能组的人的查询。
例如:所有具有“language == English”和“role == Manager”
的人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 |
用例:
是否可以构建一个参与这些用例的查询?
答案 0 :(得分:0)
这应该有效:
Person.objects.filter(skill__type='role', skill__value='Customer')
您可以使用“__
”表示法访问相关对象属性。