model.save() не вызывается при загрузке устройств Django?

#django #testing #fixtures #django-fixtures #sanity-check

#django #тестирование #приспособления #django-приспособления #проверка работоспособности

Вопрос:

Я переопределяю свой метод сохранения модели Django (), поэтому я могу выполнить дополнительную проверку работоспособности объекта. (Является ли save() правильным местом для этого?)

Не похоже, что мои приспособления / initial_fixtures.для объектов yaml вызывается метод save() . Как я могу проверить работоспособность своих устройств?

Ответ №1:

Начиная с Django 1.5, save() НЕ вызывается:

Когда файлы приспособлений обрабатываются, данные сохраняются в базе данных как есть. Методы save(), определенные моделью, не вызываются, и любые сигналы pre_save или post_save будут вызываться с raw=True, поскольку экземпляр содержит только атрибуты, которые являются локальными для модели.

https://docs.djangoproject.com/en/1.9/ref/django-admin/

Комментарии:

1. Этот ответ должен быть принят IMO.

2. это правильный ответ, я согласен, что касается правильного места для проверки, я бы сказал сериализатор ????, но тогда я сомневаюсь, что это будет вызываться через светильники

Ответ №2:

.save() Метод вызывается во время загрузки приспособления, как показано в https://code.djangoproject.com/browser/django/tags/releases/1.3.1/django/core/management/commands/loaddata.py?rev=17029#L174

Если вы используете другую версию DJ, вы можете это проверить, но я совершенно уверен, что она вызывается и в более старых версиях.

Как вы проверяете, вызван ли у ваших объектов их save() метод?

И о том, чтобы сделать это .save() , если проверки работоспособности нетривиальны, я не думаю, что это очень хорошая идея.

Ответ №3:

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

Вы можете добавить данные в свою базу данных через администратора или что-то в вашем приложении, а затем экспортировать их как приспособление, если вам нужно выполнить какую-то одноразовую первоначальную проверку.

Комментарии:

1. Если я пишу много приспособлений, возможно, есть опечатка. Следовательно, я хотел бы использовать проверки работоспособности моделей для устройств. У меня уже есть записанные приспособления, поэтому протолкнуть их через интерфейс администратора было бы двойной работой.

2. Вы не можете «проверить работоспособность» своих устройств. В этом и суть. Предполагается, что светильники чистые. Майкл говорит, что лучше создавать светильники, используя администратора для ввода данных в первую очередь, а затем использовать dumpdata для получения ваших светильников. В противном случае все зависит от вас, чтобы убедиться, что данные верны.

3. @JosephTurian, поскольку ваши устройства уже написаны, я уверен, что вы можете легко написать что-нибудь, используя библиотеки сериализации Django ( docs.djangoproject.com/en/dev/topics/serialization ), чтобы прочитать их и сохранить в обычном режиме (хотя из другого ответа это выглядит так, как будто обычные loaddata уже могут делать что-то подобное). После того, как вы сделали это один раз, чтобы убедиться, что ваши данные чистые, я бы экспортировал заведомо исправные данные в виде свежих устройств, просто используя обычную процедуру оттуда.

4. как это влияет на то, вызывается ли метод сохранения или нет?. Мои приспособления идеальны, но для целей поиска я обрабатываю некоторые поля и сохраняю их как комбинацию других полей. загрузка устройств таким сумасшедшим способом django делает их нулевыми.

5. @E.Serra, в документах Django указано, что .save() это не вызывается при загрузке приспособлений. Если вы хотите использовать приспособления для хранения данных, но затем выполнять дальнейшую обработку во время загрузки, вам нужно будет использовать платформу сериализации для ручной загрузки и сохранения их, как я упоминал выше