2015-05-03 25 views
0

以我的超級用戶'admin'身份登錄時,我可以通過任何字段篩選QuerySet。但是,當我以普通用戶身份登錄時,我只能通過「用戶」字段進行過濾。嘗試按其他字段進行篩選會返回空列表。爲什麼用戶和超級用戶篩選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),所以我錯過了某些需要爲常規用戶設置的權限,以解決此問題?

編輯補充示出的項目的圖像數據庫中的

例問題超級用戶, '管理員':

Example object for admin

實施例的問題的用戶 '傑米':

Example object for jamie

回答

1

下注沒有區別ween超級用戶和常規用戶在這個ORM查詢。

您根本沒有任何Question實例,其中myverb動詞字段和request.user用戶字段。

1

沒有區別。超級用戶也是普通用戶。

根據當時設置的用戶變量的值(我認爲它是當前登錄的用戶)您可以將您的查詢解釋爲:所有相關用戶是當前登錄用戶的問題。

因此,如果您以其他人身份登錄時看不到結果,那是因爲您確實沒有任何與之關聯的問題。

如果您確定您應該有結果,可能是您的用戶變量未設置爲您的想法。確保它的價值是正確的。

即,用戶= request.user

+0

我已經檢查用戶變量和關於 '傑米' 這是'>'而對於 '管理員' 是'>'。另請參閱編輯顯示數據庫中存在對象的問題。 –

+0

它應該工作。必須是別的東西。你如何決定它是否有效。 – Rel

+0

我懂了。在創建新用戶,更改'user'字段但不更改'verb'字段或其他字段時,我正在複製'admin'帳戶中的所有問題。這意味着我比較兩個不同的動詞對象,所以沒有結果。 –

相關問題