Что было бы самым элегантным \ эффективным способом сбросить все поля экземпляра определенной модели до значения по умолчанию?Django - Как сбросить поля модели до значения по умолчанию?
ответ
Присвойте None
в поле и сохраните.
Разве это не работает только в подмножестве ситуаций? Например, будет ли он работать для полей, не отмеченных пустым = True и null = True? – Jonathan
Вставки или обновления базы данных NULL изменяются на значение по умолчанию для поля. –
@ Джонатан. Я уверен, что ты прав. Почему Django даже имеет поля «null = True», если они просто становятся значениями по умолчанию? – Mark
После того, как вы внесли изменения в этот экземпляр, но до того, как вы его сохранили, я предполагаю? Я думаю, вам, вероятно, потребуется повторно получить его из базы данных ... Я не думаю, что экземпляры модели Django содержат «историю» изменений, внесенных в экземпляр.
Я однажды сделал это таким образом. Я не мог лучше подумать.
from django.db.models.fields import NOT_PROVIDED
for f in instance._meta.fields:
if f.default <> NOT_PROVIDED:
setattr(instance, f.name, f.default)
# treatment of None values, in your words, to handle fields not marked with null=True
...
...
# treatment ends
instance.save()
Примечание: в моем случае все поля имеют значение по умолчанию.
Надеюсь, это поможет. Счастливое кодирование.
def reset(self, fields=[], exclude=[]):
fields = fields or filter(lambda x: x.name in fields, self._meta.fields)
exclude.append('id')
for f in filter(lambda x: x.name not in exclude, fields):
if getattr(f, 'auto_now_add', False):
continue
if f.blank or f.has_default():
setattr(self, f.name, f.get_default())
Этот метод применяется в основном для сброса значения по умолчанию, но может быть адаптирован. Он сбрасывает свойство rego_update
для всех моих Event
объектов.
Event.objects.all().update(rego_update=Event().rego_update)
В качестве альтернативы, применять ее в индивидуальном порядке (т.е. для запуска пользовательских save
методов):
default = Event().rego_update # Hack to fetch the default
for event in Event.objects.all():
event.rego_update = default
event.save()
Чтобы адаптировать для сброса всех значений для одного экземпляра, вы можете вручную сбросить каждое значение по умолчанию ,
В качестве альтернативы вы можете прокрутить атрибуты, подобные другим ответам здесь, но это будет иметь проблемы с полями, которые не имеют значения по умолчанию (или не могут быть отредактированы).
- 1. Как сбросить поля формы до значения по умолчанию в cycle.js
- 2. Сбросить Tkinter Widget до значения по умолчанию
- 3. django получить значение поля модели по умолчанию
- 4. Значения по умолчанию для скрытого поля в Django модели
- 5. Как сбросить значение PYTHONPATH до значения по умолчанию в virtualenv?
- 6. по умолчанию атрибут модели поля в Django
- 7. ngStorage - Сбросить значения по умолчанию
- 8. Override значения наследственной модели по умолчанию поля
- 9. Как сбросить значения ввода текста по умолчанию?
- 10. Как сбросить ViewModel источника по умолчанию значения
- 11. Как сбросить переменную класса до значения по умолчанию 0?
- 12. Как сбросить цвет фона кнопки до значения по умолчанию?
- 13. Как сбросить значение textview до значения по умолчанию?
- 14. Как сбросить свойства qml до их значения по умолчанию?
- 15. ActionBar Sherlock Как сбросить навигационный режим до значения по умолчанию
- 16. Как сбросить MONGO_URL до значения по умолчанию в метеор?
- 17. Как сбросить значения dataframe до значений по умолчанию в R?
- 18. Как получить значение по умолчанию для поля в модели Django?
- 19. Django задает значения по умолчанию
- 20. Как сбросить язык до языка по умолчанию
- 21. Как установить значения по умолчанию для расширенной модели в Django?
- 22. Как сбросить все наблюдаемые значения по умолчанию
- 23. Сбросить настройки внешнего вида для UINavigationBar до значения по умолчанию
- 24. C# сбросить текстовое поле до значения по умолчанию
- 25. Как установить значение поля по умолчанию для значения другого поля в модели Django?
- 26. Способ сброса поля модели до значения по умолчанию с использованием данных ember-данных?
- 27. Django модели по умолчанию поля в классе models.Model
- 28. Django модели поля уникальный = True и по умолчанию = функция
- 29. Фильтр по модели поля, Django
- 30. Сбросить элемент до события «по умолчанию»
Я думаю, что я, возможно, неправильно понял ваш вопрос: хотите ли вы установить каждое поле в значение «по умолчанию», закодированное для каждого объекта поля на модели, или установить каждое поле обратно до того, что было до значения поле было изменено? –
@Matthew - предыдущий. Если бы я хотел получить последний, я бы сделал django-reversion. – Jonathan