0

我有我的意見@required_login裝飾,但我需要我的ListView只顯示與當前登錄的用戶相關的對象。Django過濾列表查看用戶

我想:

class NdaList(ListView): 
    form_class = NonDisclosureForm 
    template_name = 'nda/nda_list.html' 

    def get_queryset(self): 
     return NonDisclosure.objects.filter(user=self.request.user) 

,但它給了我一個Cannot query "charles": Must be "Profile" instance.

我的模型:

class Profile(models.Model): 
    user = models.OneToOneField(settings.AUTH_USER_MODEL, on_delete=models.PROTECT, related_name="profile", verbose_name="user") 
... 

class NonDisclosure(Timestamp): 
    user = models.ForeignKey(Profile, on_delete=models.CASCADE, related_name="nda", verbose_name="user") 
... 

我試圖盡我所能,但我仍然有限的Django的知識,我沒有想法。感謝您的時間。

+0

發表您的settings.py文件 –

回答

2

快速的解決方案:

 return NonDisclosure.objects.filter(user__user=self.request.user) 

補充:

我認爲這是更好的NonDisclosure改變user字段名稱,因爲實際的字段是指向一個Profile實例,而不是User

class NonDisclosure(Timestamp): 
    profile = models.ForeignKey(Profile, on_delete=models.CASCADE, related_name="nda", verbose_name="user") 

,也是你的查詢語句變化:

return NonDisclosure.objects.filter(profile__user=self.request.user) 
+0

但用戶類型的'settings.AUTH_USER_MODEL' –

+0

@AvinashRaj'AUTH_USER_MODEL'也是用戶喜歡模型。畢竟,額外的部分只是爲了避免誤導。 – soooooot

+0

你必須通過AUTH_USER_MODEL的實例不是字符串。 –