Ответ 1
Вы можете использовать двойное подчеркивание в ключевом слове, переданном в filter()
, для доступа к полям в отношении внешнего ключа. Вот так:
Item.objects.filter(parent__name="xyz")
У меня есть модель с внешним ключом "Родительский"
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
Каков правильный способ сделать это?
Вы можете использовать двойное подчеркивание в ключевом слове, переданном в filter()
, для доступа к полям в отношении внешнего ключа. Вот так:
Item.objects.filter(parent__name="xyz")
http://docs.djangoproject.com/en/dev/topics/db/queries/#lookups-that-span-relationships
Только для будущих ссылок для Googlers, с последними версиями Django вам нужно использовать дополнительный метод в ключевом слове. Например, вместо parent__name
вам нужно сделать parent__name__exact
. Ссылка Cato содержит другие примеры.