0

我使用Python 3.6和Django的1.11Django的身份驗證 - 只過濾用戶創建的(不是全部)記錄查看

我有一個工作程序(用於學習目的)對用戶進行認證,然後允許用戶創建基於模型的Django表單中的「事物」。在這種情況下,用戶可以「跳槽」的東西,比如吸菸或飲酒,並指定其退出日期,等的主頁當前顯示的所有用戶創建的所有「東西」的清單。世界上任何人都可以看到這些。

我想要做的是限制這個視圖,以便1)唯一認證的用戶可以查看數據庫中的「東西」,和2)通過認證的用戶只能查看自己的「東西」。

我怎麼想這將實現在app/views.py文件開始。 Cuurently,主頁視圖(所有的事情的清單)看起來像這樣:

def something_list(request): 
    things = Thing.objects.filter(quit_date__lte=timezone.now()).order_by('quit_date') 
    return render(request, 'quit/something_list.html', {'things': things}) 

這定義了一個查看它通過訂單「戒菸日」,並將其發送給我的「東西列表」模板。

通過在線搜索,似乎可以通過將參數添加到Thing.objects.filter()來指定僅查看用戶的數據。迄今爲止,我已經試過各種原因造成的錯誤,包括這個:

things = Thing.objects.filter(owner=request.user).filter(...) 

things = Thing.objects.filter(owner=request.user, quit_date__lte=timezone.now()).order_by('quit_date') 

這裏是我的模型,只是讓你知道字段名稱:

class Thing(models.Model): 
    quitter = models.ForeignKey('auth.User') 
    title = models.CharField(max_length=200) 
    quit_date = models.DateTimeField(default=timezone.now) 
    cost_per_day = models.DecimalField(max_digits=6, decimal_places=2) 
    notes = models.TextField() 

一旦再次,我試圖找出如何修改我的觀點(上圖),使身份驗證的用戶只能看到「東西」,他們已經建立。另外,我希望未經授權的用戶看到「事物」中的任何一個。希望兩者都可以用同一行代碼完成。

在此先感謝。我是初學者。請讓我知道如果需要更多信息的答案。

更新:(解決方案) 以下他人提供的解決方案是正確的。這裏是適用於我的代碼行:

things = Thing.objects.filter(quitter=request.user).filter(quit_date__lte=timezone.now()).order_by('quit_date') 

當我做出這個改變時,我得到了一個'AnonymousUser'對象錯誤。我需要爲未認證的用戶整理我的默認視圖。如果用戶登錄,他們現在只能看到自己的數據,但如果一個匿名用戶瀏覽此頁,他們得到了一個錯誤。我添加了一個「如果,否則」有條件要上我的觀點來處理這個問題。現在它似乎在工作,我想我會分享我的整個看法,以防它可能幫助某人。

def something_list(request):  
if request.user.is_authenticated: 
    things = Thing.objects.filter(quitter=request.user).filter(quit_date__lte=timezone.now()).order_by('quit_date') 
    return render(request, 'quit/something_list.html', {'things': things}) 
else: 
    return render(request, 'quit/base.html') 
+0

您列出的任何一個'filter'嘗試都應該這樣做,可能的修正是您的示例代碼指的是'quitter',而您的示例過濾器指的是'owner'。如果這不僅僅是在轉錄代碼時引入的錯誤,那就是問題所在。 –

+0

至於限制未經授權用戶的訪問權限,我通常會將我的應用程序設置爲重定向至登錄頁面(如果未獲得授權),如文檔中所述:https://docs.djangoproject.com/en/1.11/topics/auth/default /#限制訪問登錄用戶但如果不是,'if request.user.is_authenticated:' –

+0

感謝您的協助。這是問題。我上面有詳細的更新。 –

回答

1

您的字段被稱爲quitter,而不是owner

Thing.objects.filter(quitter=request.user, ....) 

爲了將來的參考,當您遇到錯誤時,您應該將它們發佈在問題中。

+0

謝謝。您的解決方案奏效我爲上面的詳細解決方案創建了一個更新。 –