Получение данных из нескольких столбцов из дополнительного запроса в 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)

Вернуться на верх