2014-09-22 191 views
0

我正在使用事件日志插件,我试图从日志模型中过滤一个查询集,虽然我似乎无法让它工作。Django过滤器模型查询集

我的模型(这是简化了相关性,但重要的信息有):

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 2014-09-22 16:32:19

+0

如何通过比较request.user.profile.user_company与Log的用户外键来进行过滤?就像log = Log.objects.filter(log.user.profile.user_company = user_company)? – dmic23 2014-09-22 16:51:51

回答

2

相反的:

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

尝试:

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

您开始使用日志对象,所以你必须与关系倒退工作你有。日志与用户相关联,该用户与UserProfile相关,后者包含user_company。因此,如果您要过滤日志查询集,则查找将从user - userprofile - user_company开始。每个之间的双下划线告诉ORM寻找相关的字段。

这应该为您提供关联用户是您定义的user_company的成员的所有日志,您将通过该请求获取该日志。

我不是数据库向导,但这看起来像是一个非常强烈的查找给我。也许你可以削减一个步骤,并通过将日志关联到用户配置文件而不是用户来减轻负载?

+0

是的,就是这样!谢谢您的帮助。 – dmic23 2014-09-22 17:01:11

0

您应该按用户进行过滤,而不是由用户公司进行过滤。

试试这个:

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

我试图过滤当前用户公司的所有日志。您的回答只能由当前用户过滤。 – dmic23 2014-09-22 16:24:43

+0

但是在你的模特里,你与公司没有任何关系。模型记录是否正确? – 2014-09-22 16:30:39

+0

公司与用户资料相关。 – dmic23 2014-09-22 16:45:54