繁体   English   中英

为什么过滤QuerySet对于用户和超级用户的行为会有所不同?

[英]Why does filtering a QuerySet behave differently for user vs. superuser?

当以我的超级用户“ admin”身份登录时,我可以按任何字段过滤QuerySet。 但是,当我以普通用户身份登录时,只能通过“用户”字段进行过滤。 尝试按任何其他字段进行过滤将返回一个空列表。

class Question(models.Model):

    user = models.ForeignKey(User, default=1)
    verb = models.ForeignKey(Verb)
    voice = models.ForeignKey(Voice)
    ...

这工作正常:

def next_question(request):
    user = request.user
    q = Question.objects.filter(user=user)

当以超级用户身份登录时,此方法工作正常,但作为常规用户失败( myverb是我的Verb模型的实例):

def next_question(request):
    user = request.user
    q = Question.objects.filter(user=user, verb=myverb)

我是Django的新手(虽然不是Python),所以我是否缺少为常规用户设置的某种权限(该权限可以解决此问题)?

编辑以添加显示数据库中项目的图像

超级用户“ admin”的示例问题:

管理员的示例对象

用户“ jamie”的示例问题:

杰米的示例对象

在此ORM查询中,超级用户和普通用户之间没有区别。

您根本没有任何带有myverb动词字段和request.user用户字段的Question实例。

没有区别。 超级用户也是普通用户。

根据当时将用户变量的值设置为什么(我假设它是当前登录的用户),您可以将查询解释为:所有相关用户是当前登录用户的问题。

因此,如果您以其他人的身份登录时没有看到任何结果,那是因为您确实没有与之相关的任何问题。

如果您确定应该有结果,则可能是您的用户变量未设置为您认为的那样。 确保其值正确。

即用户= request.user

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM