Restricting items to a specific user

24 views
Skip to first unread message

dtdave

unread,
Sep 14, 2022, 6:31:39 AM9/14/22
to Django users
I have the following models:

class AccountManager(models.Model):
    account_manager = models.ForeignKey(
      settings.AUTH_USER_MODEL, 
      on_delete=models.CASCADE
    )

    def __str__(self):
        return str(self.account_manager)

class Client(models.Model):
    account_manager = models.ForeignKey(AccountManager, on_delete=models.CASCADE, related_name='account_manager_clients')
    client = models.CharField(max_length=255)

    def __str__(self):
        return self.client

class Contract(models.Model):
    client = models.ForeignKey(Client, on_delete=models.CASCADE, related_name='client_contracts')
    site_name = models.CharField(max_length=255)

    def __str__(self):
        return self.site_name

I can restrict the clients to the specific account managers by using the following view"
class ClientListView(LoginRequiredMixin, ListView):
    model = Client
    template_name = "clients/list.html"

    def get_queryset(self, *args, **kwargs):
        return (
            super()
            .get_queryset(*args, **kwargs)
            .filter(account_manager__account_manager=self.request.user)
        )

However I can't seem to restrict the contracts to the account manager with the following view:
class AMContractDetailView(LoginRequiredMixin, DetailView):
    model = Contract
    template_name = 'contracts/am_contract_detail.html'

    def get_queryset(self, *args, **kwargs):
        return (
            super()
            .get_queryset(*args, **kwargs)
            .filter(client__account_manager=self.request.user.id)
        )
This allows account managers to see all the clients not just their own.
I know I am doing something fundamentally wrong but have got a bit lost!

Any help would be appreciated.




subin

unread,
Sep 16, 2022, 4:15:42 PM9/16/22
to django...@googlegroups.com
Thank you for your recent purchase from ! Please contact us if you have any questions or visit our website:

--
You received this message because you are subscribed to the Google Groups "Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to django-users...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/7405a8f2-bdac-4e20-b53b-3f9fefb6ea27n%40googlegroups.com.
Reply all
Reply to author
Forward
0 new messages