I have two models:
class A(models.Model):
name = models.CharField(max_length=100, unique=True)
class B(models.Model):
a = models.ForeignKey(A)
>
This worked for me:
a_qs = A.objects.filter(b__a__isnull=False).distinct()
It gives only the objects of A which has a B object pointing to it. Use a__isnull=False
to check whether a ForeignKey exists. If it does, it can, by definition, only point to A. Duplicates are removed with distinct()
.
When a related_name
parameter has been set, e.g.
class A(models.Model):
name = models.CharField(max_length=100, unique=True)
class B(models.Model):
a = models.ForeignKey(A, related_name='b_list')
this worked:
a_qs = A.objects.filter(b_list__a__isnull=False).distinct()