Search code examples
djangodjango-modelsdjango-filter

Django filter get parent model based on child model value


class Apps(models.Model):
  app_name =  models.CharField(max_length=200)
  app_type = models.CharField(max_length=200)
  app_link = models.CharField(max_length=200)

class FavouriteApps(models.Model):
  user = models.ForeignKey(User,on_delete=models.CASCADE)
  app =  models.ForeignKey(Apps,on_delete=models.CASCADE)

I need to get all favourite apps details from 'Apps' table based on the logged in user. Example

App Table

app_name app_type  app_link
AppA     type1     linkA
AppB     type1     linkB
AppC     type2     linkC

Favourite Table

user   app
userA  AppA
userB  AppA
userA  AppC

So when UserA logged in I need to fetch userA favourite apps details using foriengkey relationship. Here it is AppA and AppC are favourite apps for userA


Solution

  • I had tried this and got the answer

    Apps.objects.annotate(all=Exists(FavouriteApps.objects.filter(Q(user__username=self.request.user.username), app_id=OuterRef('pk')))).filter(all=True)