У меня есть две моделиDjango присоединиться как запросы
class A(models.Model):
id = PGUUIDField(primary_key=True)
name = CharField(max_length=32)
prefix = CharField(max_length=64)
controller = models.ForeignKey(Controller)
location = models.ForeignKey(B, related_name="blink")
class B(models.Model):
id = PGUUIDField(primary_key=True)
name = CharField(max_length=128)
В таблице для А содержит множество объектов А и таблица B содержит множество B объектов.
Использование сырой SQL я могу ...
SELECT b.* FROM B AS b
JOIN A AS a
ON b.id = a.location_id
И я получить список всех объектов В, что А имеет внешний ключ.
Но я не могу на всю жизнь понять, как это сделать с чистым Django. Не могли бы вы рассказать мне, как?
Я искал select_related и попробовал, но я должен делать что-то неправильно. Я продолжаю получать QuerySet А объекты
В настоящее время, используя следующие:
queryset2 = []
try:
qs = A.objects.all().values('location_id')
queryset2 = B.objects.filter(id__in=qs)
print queryset2
self.fields['location'].queryset = queryset2
Это описано в [Часть 2 учебника] (https://docs.djangoproject.com/en/1.9/intro/tutorial02/). –
queryset2 = B.objects.filter (id = a__location_id) --returns --global name 'a__location_id' не определен ()
Я предполагаю, что вы ссылались на этот «Choice.objects.filter» (question__pub_date__year = current_year) "в учебнике –
Нет, я не имею в виду это. Вы также не делаете то, что они делают в учебнике. Обратите внимание, что синтаксис двойного подчеркивания относится к _name аргумента_, а не к самому аргументу. Вот почему вы получаете ошибку имени, потому что ссылаетесь на переменную с именем 'a__location_id', которую вы никогда не определяли. –