Получение данных из нескольких столбцов из дополнительного запроса в Django
У меня есть две модели, как показано ниже:
class Model1(models.model):
id = models.UUIDField(default=uuid.uuid4, primary_key=True)
filename = models.CharField(max_length=255)
class Model2(models.model):
id = models.UUIDField(default=uuid.uuid4, primary_key=True)
filename = models.CharField(max_length=255)
Я хотел бы получить связанные model2
, которые имеют то же значение столбца в filename
, что и столбец model1
.
Моим решением было использовать либо Subquery
, либо Extra
. Проблема с Subquery
в том, что он позволяет запрашивать только один столбец, но мне нужен объект dict всех столбцов model2
, связанных с model1
. У них нет отношения foreignkey
для использования select_related
. Поэтому я попытался использовать extra
, но снова получаю ошибку множественных столбцов. Как я могу решить эту проблему?
Мой код выглядит следующим образом:
model1_objs = Model1.objects.filter(id=given_id).extra(
select={
"model2_obj": f"SELECT *
FROM model2
WHERE filename = model1.filename
AND id = '{model2_id}'"
}
)
Это не работает.
Это может быть не так эффективно, как решение, о котором вы думали, но вы можете попробовать следующее:
model1_obj = Model1.objects.get(id=given_id)
model2_objs = Model2.objects.filter(filename=model1_obj.filename)
Примечание: рассмотрите возможность использования метода get() для получения уникальных объектов
.
Взгляните на это: Создание запросов (документация Django)