2014-09-22 5 views
0

Я использую плагин журнала событий, который я пытаюсь отфильтровать набор запросов из модели Log, который не кажется слишком сложным, хотя я не могу заставить его работать.Django filter model queryset

Мои модели (которые упрощены для уместности, но важной информации там):

class User (model.Models) 
    standard User Registration data 


class UserProfile(model.Models) 
    user = models.OneToOneField(User) 
    user_company = models.ForeignKey('Company') 


class Company(models.Model) 
    name = models.CharField(max_length=50) 


class Log(models.Model) 
    user = models.ForeignKey('User') 

Я пытаюсь фильтровать все журналы одной и той же компании текущего пользователя. Я пытался использовать:

user_company = request.user.profile.user_company 
log = Log.objects.filter(user=user_company) 

но не повезло. Что мне не хватает?

+0

Вы сравниваете пользователей с пользователями компании – cor

+0

Как фильтровать путем сравнения request.user.profile.user_company с внешним пользователем пользователя Log? Что-то вроде log = Log.objects.filter (log.user.profile.user_company = user_company)? – dmic23

ответ

2

вместо:

log = Log.objects.filter(user=user_company) 

Try:

log = Log.objects.filter(user__userprofile__user_company=user_company) 

Вы начинаете с объектом журнала, так что вы должны задом работать с отношениями у тебя есть. Журнал привязан к User, который связан с UserProfile, который содержит user_company. Поэтому, если вы фильтруете набор запросов журнала, поиск выполняется из user - userprofile - user_company. Двойные подчеркивания между каждым указывают ORM на поиск соответствующей области.

Это должно дать вам все журналы, в которых связанный пользователь является членом вашей определенной пользовательской_компьютинга, которую вы получаете через запрос.

Я не мастер базы данных, но это кажется довольно интенсивным поиском для меня. Может быть, вы могли бы вырезать шаг и уменьшить нагрузку, связав журналы с UserProfile, а не с пользователем?

+0

Да, вот оно! Спасибо за помощь. – dmic23

0

Вы должны фильтровать пользователь, а не пользовательской компанией.

Попробуйте это:

log = Log.objects.filter(user=request.user) 
+0

Я пытаюсь отфильтровать все журналы из компании текущего пользователя. Ваш ответ фильтруется только текущим пользователем. – dmic23

+0

Но в ваших моделях у вас нет каких-либо отношений с компанией. Правильно ли задана модель журнала? –

+0

Компания связана с профилем пользователя. – dmic23

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