Можно ли вернуть пустые строки в .values() из набора запросов Django?
В Django, если у меня есть 2 модели:
class MyModelA(models.Model):
column_1 = ...
column_2 = ...
column_3 = ...
class MyModelB(models.Model):
column_1 = ...
column_2 = ...
column_3 = ...
column_4 = ...
column_5 = ...
Мне нужно использовать union для объединения результатов в них, но они не имеют одинакового количества столбцов. Для дополнительных столбцов мне просто нужно, чтобы MyModelA возвращала пустые строки.
Возможно ли сделать что-то подобное?
MyModelA.objects.values("column_1", Value(""), Value(""), "column_2", "column_3").union(
MyModelB.objects.values("column_1", "column_2", "column_3", "column_4", "column_5")
)
Из docs на union
Передача различных моделей работает до тех пор, пока список SELECT одинаков во всех наборах запросов (по крайней мере, типы, имена не имеют значения, пока типы расположены в том же порядке)
Это означает, что я в основном пытаюсь составить карту:
MyModelA.column_1 --> MyModelB.column_1
"" --> MyModelB.column_2
"" --> MyModelB.column_3
MyModelA.column_2 --> MyModelB.column_4
MyModelA.column_3 --> MyModelB.column_5
Использование Value(""), как указано выше, не работает. Есть ли другой способ сделать это?
from django.db.models import F, Value
MyModelA.objects.values("column_1", column_2=Value(""), column_3=Value(""), column_4=F("column_2"), column_5=F("column_3")).union(
MyModelB.objects.values("column_1", "column_2", "column_3", "column_4", "column_5")
)
Возможно, вам даже не понадобится F, поскольку в вашем случае имена могут не пересекаться с реальными именами столбцов.