Я пишу запрос в Django ORM, который возвращает всех людей, у которых есть набор навыков.Сложный запрос в Django, где существует подзапрос с рационализацией ManyToMany
Например: все люди с «языка == английский язык» и «роль == 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 |
отчеты по таблице Skill
| type | value | persons |
|----------|------------|--------------|
| role | Customer | John, Bull |
| role | Manager | John |
| language | English | Bull, Arnold |
| language | Portuguese | John, Bull |
Прецеденты:
- На фильтровальной роли заказчика и язык английский язык должен вернуть человека Bull.
- О роли фильтра Клиент и язык Португальский должен вернуть людей Джона и Быка.
- О роли фильтра Менеджер и язык Английский язык не должен возвращать никаких результатов.
Возможно ли построить запрос, который будет использоваться в этих случаях использования?
Спасибо, я буду связывать этот код, например: 'Person.objects.filter (skill__type = 'role', skill__value = 'Customer'). Filter (skill__type = 'idiom', skill__value = 'Portuguese'). Filter (skill__type = '...', skill__value = '...') ' –
Я уверен, что вы можете, это объект запроса. – Gocht