Ошибка "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 для более подробной информации и других опций.

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