Как я могу получить все объекты в модели Django, которые имеют определенное значение для поля ForeignKey?

У меня есть модель с внешним ключом "Родительский"

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

Это модель FK

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

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

Я пытаюсь запустить запрос, который получает все элементы с родителем "xyz". Я ничего не получаю

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

Когда я пытаюсь:

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

Или:

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

Я получаю сообщение об ошибке:

SyntaxError: keyword can't be an expression

Каков правильный способ сделать это?

Ответы

Ответ 1

Вы можете использовать двойное подчеркивание в ключевом слове, переданном в filter(), для доступа к полям в отношении внешнего ключа. Вот так:

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

Документация Django

Ответ 3

Только для будущих ссылок для Googlers, с последними версиями Django вам нужно использовать дополнительный метод в ключевом слове. Например, вместо parent__name вам нужно сделать parent__name__exact. Ссылка Cato содержит другие примеры.