簡體   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