#django
Вопрос:
Мне интересно, есть ли у Django функции для удаления определенных элементов из списка после их добавления. Например, допустим, у меня есть запрос, который выглядит так:
FooBar.objects.annotate(
field_1=field_1,
field_2=field_1,
field_3=field_1
).filter(
some_filter_set
)
would produce SQL like so:
select field_1, field_2, field_3 from foo_bar where some_filter_set
После того, как первоначальный запрос был сделан, я хотел бы сохранить этот запрос и создать еще одну копию, которая будет точно такой же, но сведена только к полю_1 в выборе. Предоставляет ли Django функциональность для непосредственного редактирования выбора?
Причина этого в том, что у меня есть очень большой динамически сгенерированный запрос, который необходимо использовать в подзапросе. Я хотел бы взять окончательную версию запроса, скопировать ее, изменить выбор и использовать ее в качестве подзапроса.
Спасибо!
Ответ №1:
Как насчет чего-то вроде этого?
values_list = ['field1', 'field2', ...]
# add or remove fields from the list as necessary:
...
queryset = FooBar.objects.filter(some_filter_set).values(*values_list)
Или, если вы хотите придерживаться annotate
, мы используем python, так что:
annotation_dictionary = {
"new_field_name_1" : "field_name_1",
"new_field_name_2" : "field_name_2",
...
}
# add or remove entries from the dictionary as necessary:
...
FooBar.objects.annotate(
**annotation_dictionary
).filter(
some_filter_set
)