Миграции не могут быть запущены из-за оценки QuerySet в Serializer? - PullRequest
0 голосов
/ 27 ноября 2018

Попытка решить эту проблему курицы и яйца.Я определил новую модель, в которую входят внешние ключи существующей модели, и произвел новые миграции, включая миграцию данных, которая предусматривает некоторые значения по умолчанию для новой модели.

В сериализаторе для существующей модели я хотелчтобы определить значение по умолчанию следующим образом:

new_thing = serializers.PrimaryKeyRelatedField(
    queryset=NewThing.objects.all(),
    default=NewThing.objects.get(id=DEFAULT_NEW_THING_ID),
)

Я не понимаю специфический механизм django, но, похоже, это вызывает проблемы при выполнении миграций (хотя make-миграции кажутся нормальными).Похоже, что миграция запускает серию проверок приложений для представлений и, в конечном итоге, сериализатора, где он оценивает NewThing QuerySet и возвращает ошибку, что связь для NewThing не существует (поскольку миграция еще не была выполнена).

1 Ответ

0 голосов
/ 27 ноября 2018

Вы никогда не должны выполнять реальные запросы в определениях уровня класса;это в целом верно как для Django, так и для DRF.get - это запрос, который попадет в базу данных во время определения, хотя аргумент queryset не будет и будет в порядке.

Если вы хотите установить значение по умолчанию, основанное на реальном объекте, вам следуетсделайте это во время создания, определив метод create(), в котором вы будете проверять, не указано ли значение.

...