Django过滤器模型查询集

时间:2014-09-22 16:16:48

标签: django django-models

我正在使用一个事件日志插件,我试图从Log模型中过滤一个看起来并不太复杂的查询集,虽然我似乎无法让它工作。

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

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)

但没有运气。我错过了什么?

2 个答案:

答案 0 :(得分:2)

而不是:

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

尝试:

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

您从Log对象开始,因此您必须使用您拥有的关系向后工作。 Log与User绑定,User与UserProfile相关,后者包含user_company。因此,如果您要过滤日志查询集,则查找来自user-userprofile - user_company。每个之间的双下划线告诉ORM查找相关字段。

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

我不是数据库向导,但这对我来说似乎是一个非常激烈的查找。也许您可以通过将日志与UserProfile而不是用户相关联来减少一个步骤并减少负载?

答案 1 :(得分:0)

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

试试这个:

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