![](/img/trans.png)
[英]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.