Reputation: 3289
I have @required_login
decorator in my views, but I need my ListView
to show only objects related to the currently logged in user.
I am trying:
class NdaList(ListView):
form_class = NonDisclosureForm
template_name = 'nda/nda_list.html'
def get_queryset(self):
return NonDisclosure.objects.filter(user=self.request.user)
but it gives me a Cannot query "charles": Must be "Profile" instance.
My models:
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")
...
I have tried everything I can, but with my still limited knowledge of Django, I am out of ideas. Thank you for your time.
Upvotes: 1
Views: 1109
Reputation: 1749
quick solution:
return NonDisclosure.objects.filter(user__user=self.request.user)
additional:
I think it's better to change the user
field name in NonDisclosure
, since actually the field is point to a Profile
instance instead of User
.
class NonDisclosure(Timestamp):
profile = models.ForeignKey(Profile, on_delete=models.CASCADE, related_name="nda", verbose_name="user")
and also your query statement change to:
return NonDisclosure.objects.filter(profile__user=self.request.user)
Upvotes: 3