How can I get all the objects in a Django model that have a specific value for a ForeignKey field?

StackOverflow https://stackoverflow.com/questions/1086341

  •  23-08-2019
  •  | 
  •  

Question

I have a Model with a Foreign Key of "Parent"

class Item(models.Model):
parent = models.ForeignKey(Parent)

This is the FK model

class Parent(models.Model):
name = models.CharField(blank=True, max_length=100)

def __unicode__(self):
    return str(self.name)

I am trying to run a query that gets all Items with a parent of "xyz" I get nothing

Item.objects.filter(parent="xyz")

When I try:

Item.objects.filter(parent.name="xyz")

Or:

Item.objects.filter(str(parent)="xyz")

I get an error:

SyntaxError: keyword can't be an expression

What is the proper way to do this?

Was it helpful?

Solution

You can use a double underscore in the keyword passed to filter() to access fields in a foreign key relationship. Like this:

Item.objects.filter(parent__name="xyz")

Django documentation

OTHER TIPS

Just for future reference for Googlers, with recent versions of Django you have to use an additional method in the keyword. For example, instead of parent__name you have to do parent__name__exact. Cato's link contains other examples.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top