Search code examples
pythondjangodjango-modelsdjango-querysetreverse-lookup

django reverse lookup query within three tables


I have three tables User, Users_clients, and Credits. I want to list tables of current user's clients with their details and credit. If any client is listed in credit table then credit should return 0 where else it should return the credit value.

my model.py is

class User_clients(models.Model):
user = models.ForeignKey(User, related_name='myuser')
client = models.ForeignKey(User, related_name='myclient')

class Credits(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
credit = models.IntegerField(null=True, default=0)

my views.py is

def clients(request):
try:
    data = User_clients.objects.order_by('-id').filter(user_id=request.user.id)[0:10]
except User_clients.DoesNotExist:
    data = None
return render(request, "client_list.html",{'title':"Client List",'clients':data,'active':'myclients','open':'clients'})

Thanks a lot in advance!


Solution

  • updating after your comment:

    from itertools import chain
    from django.db.models import F
    
    
    without_credit = User_clients.objects.filter(user=request.user, client__credits__is_null=True).annotate(credit=0)
    with_credit = User_clients.objects.filter(user=request.user, 
    client__credits__is_null=False).annotate(credit=F("client__credits__credit"))
    data = chain(without_credit, with_credit)