Ошибка "No such table" из файла serializers.py при выполнении команды миграции
Недавно я перевел свое приложение Django с использования стандартной модели User на пользовательскую модель User, и поскольку это не рекомендуется делать в середине проекта, мне пришлось удалить базу данных и миграции, заново создать миграции и запустить migrate. Это прекрасно работает, когда я закомментировал весь файл serializers.py, а также закомментировал все ссылки на него. Однако теперь, когда я хочу иметь возможность выполнять все новые шаги миграции на уровне производства БЕЗ необходимости комментировать serializers.py.
Я знаю, что я ссылаюсь на таблицу, которая технически не существует, поэтому мне просто интересно, какой лучший способ сделать это? Вот мой код serializers.py:
class MyModelSerializer(serializers.Serializer):
features = Feature.objects.values_list("feature_name", flat=True) # Feature is a model
feature = serializers.ChoiceField(features) # this is where the error happens
Ошибка гласит: "нет такой таблицы: myapp_feature"
Проблема заключается в том, что вы выполняете запрос для заполнения поля класса. Обычно это не рекомендуется по той самой причине, которую вы видите здесь.
Решением является задержка вызова Feature.objects.values_list()
. Один из способов - использовать вызываемую переменную:
feature = serializers.ChoiceField(lambda: Feature.objects.values_list())
См. документацию для ChoiceField
и kwarg для choices
Model
для более подробной информации и других опций.