@reb00ter
Django developer

Как сделать lazy выборку данных для поля формы в админке?

Есть готовый проект, который развивается уже достаточно долго.
И за время развития в нём появились примерно вот такого вида конструкции в admin.py
class FromCityToCountryDescription_Form(forms.ModelForm):
    from_city = forms.ModelChoiceField(
        queryset=City.objects.filter(id__in=[i.city.id for i in FlyFromCity.objects.all()]),
        label=capfirst(_('fly from city'))
    )

такое определение queryset мешает сделать migrate на новом месте разработки, поскольку таблицы, из которой должна быть сделана выборка, не существует
django.db.utils.OperationalError: no such table: burning_tours_flyfromcity

пробовал заменить на генератор - не помогло.
  • Вопрос задан
  • 50 просмотров
Решения вопроса 1
tumbler
@tumbler Куратор тега Django
бекенд-разработчик на python
City.objects.filter(id__in=[i.city.id for i in FlyFromCity.objects.all()])

City.objects.filter(id__in=FlyFromCity.objects.values_list('city_id', flat=True))

Два queryset выше эквиволентны, хотя и генерируют разные SQL. Второй лучше тем, что на момент конструирования он не требует получения всех городов из FlyFromCity. По-идее вопрос с миграциями после этого решится (нет запросов при импорте модуля - нет проблем с миграциями)
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы