我正在使用一个事件日志插件,我试图从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)
但没有运气。我错过了什么?
答案 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)