[英]Why does the `is` operator behave differently in a script vs the REPL?
[英]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.