2015-07-19 2 views
1

У меня есть 3 модели, пользователь, группа и экзамен:В Джанго, для пользователя, получить все объекты, которые ForeignKey группам он/она принадлежит (эффективно)

from django.db import models 
from django.contrib.auth.models import User, Group 

class Exam(models.Model): 
    # a lot of fields 
    solutions_group = models.ForeignKey(Group) 

Для экземпляра user модели User Я хочу получить все Exam s, у которого solutions_groupuser принадлежит.

Это то, что я подумал:

exam_list = [] 
for group in user.groups.all(): 
    exam_list+= list(group.exam_set.all()) 

Но это включает в себя несколько запросов к базе данных.

Есть ли лучший способ сделать это, используя вопросы с меньшими объемами?

Я использую Python 3.4 и Django 1.8.

ответ

0

Try фильтрация на Exam.objects используя "in" filter

user_groups = user.groups.all() 
user_exams = Exam.objects.filter(solutions_group__in=user_groups) 
0

Я думаю, вы также можете использовать related_name от группы пользователей (user_set), используя следующий запрос:

user_exams = Exam.objects.filter(solutions_group__user_set=user) 
+0

'Exam.objects.filter (solutions_group__user_set = admin) 'не работает. 'ValueError: не может запросить« admin »: должен быть экземпляр« Group ». Здесь admin имеет тип User. –

+0

'Exam.objects.filter (solutions_group__user_set = user)' не работает. 'ValueError: не может запросить« gauss »: должен быть экземпляр« Group ». Здесь« gauss »- это' user.username' –

 Смежные вопросы

  • Нет связанных вопросов^_^