将某个模型实例的所有字段重置为其默认值的最优雅\有效的方法是什么?Django - 如何将模型字段重置为默认值?
6
A
回答
1
0
你改变了一个实例,但你“保存”之前后,我承担?我认为你可能需要从数据库中重新检索它......我不认为Django模型实例会对实例发生的变化保留一个“历史记录”。
5
我曾经这样做过。没有更好的办法可以想到。
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()
注意:在我的情况下,所有的字段,都有默认值。
希望它会有所帮助。快乐编码。
3
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())
0
此方法主要适用于将单个值重置为默认值,但可以进行调整。它会重置所有Event
对象的rego_update
属性。
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. django获取默认模型字段值
- 2. Django模型字段默认为空
- 3. Django的:如何将一个字段的默认值设置为一个字段的值在父模型
- 4. 如何重写Django中的默认用户模型字段?
- 5. 设置在Django模型字段默认值更好的办法
- 6. 如何获取Django模型中字段的默认值?
- 7. 将默认值设置为模型(Sails.js)
- 8. 如何在Django中为模型设置默认值?
- 9. 将默认值设置为模式已具有默认值的字段
- 10. django模型默认值
- 11. Django AdminForm字段默认值
- 12. Yii2:为模型的所有字段设置默认值
- 13. 如何为LinqToSQL模型的字段指定默认值?
- 14. 如何从另一个模型已知字段值设置模型字段的默认值?
- 15. 如何在使用Hibernate更新时将DB字段值重置为默认值?
- 16. CakePHP Model :: save()将字段重置为默认值
- 17. Django将默认值视为模板
- 18. 如何将表格字段的默认值设置为0.00?
- 19. Django - 从另一个模型字段获取默认值
- 20. 如何为整数字段Django设置默认值,最大值和最小值?
- 21. Django如何配置为不使默认字段不为空?
- 22. 从模型方法的Django模型字段默认
- 23. 默认模型字段Rails 3.1
- 24. 从用户实例字段设置默认值到UserProfile模型字段
- 25. 使用默认值设置的Django模型字段不违反保存时
- 26. Django模型:设置相对于另一个字段的默认值
- 27. 如何为Django ForeignKey Model或AdminModel字段指定默认值?
- 28. 如何将ListBox.Rows属性重置为默认值(没有硬编码默认值)
- 29. 覆盖默认字段类型在Django
- 30. Django:如何使内联模型formset中的字段默认为不可编辑?
我想我可能误解了您的问题 - 您是否想将每个字段设置为模型上为每个字段对象编码的“默认”值 - 或者将每个字段设置回原来的值字段被修改? – 2010-07-12 15:22:38
@Matthew - 之前。如果我想要后者,我会让你django回归。 – Jonathan 2010-07-12 15:26:42