Django объединяет запрос с соответствующим ключом - PullRequest
0 голосов
/ 25 апреля 2018

У меня есть эта модель:

class Role(models.Model):
    role_name = models.CharField()

class RolePriviledge(models.Model):
    role = models.ForeignKey(Role, related_name='role_priviledge' )        
    module_name = models.CharField()
    priviledge_level = models.CharField()

class UserRole(models.Model):
    user = models.ForeignKey(User)
    role = models.ForeignKey(Role)

Я пытаюсь найти все привилегии для указанного пользователя.В sql это будет:

SELECT t3.* 
FROM UserRole t1
JOIN Role t2 on t1.role_id = t2.id
JOIN RolePriviledge t3 on t2.id = t3.role_id
WHERE t1.user_id = USER_ID

(я также могу пропустить объединение с Role и просто выполнить внутреннее объединение между UserRole и RolePriviledge)

Как быЯ делаю это присоединиться к Django ORM?UserRole.objects.filter(user_id=USER_ID).select_related('role') присоединится к UserRole с Role.Как мне присоединиться к ней с RolePriviledge?

1 Ответ

0 голосов
/ 25 апреля 2018

Используйте обратное отношение .

privileges = []
user_roles = UserRole.objects.filter(user__id=USER_ID)

for user_role in user_roles:
    privileges.append(user_role.role.role_priviledge.all())

privileges - это list наборов запросов.

...