Django 管理表单覆盖默认值
我在Django模型的构造函数里设置默认值,像这样:
class Student(models.Model):
name = models.TextField()
location = models.TextField()
def __init__(self, *args, **kwargs):
self.location="sample"
super(Student, self).__init__(*args, **kwargs)
现在我在管理界面的表单中排除了位置字段。
但是如果我在StudentAdmin里这样做:
def save_model(self, request, obj, form, change):
raise Exception(obj.location)
那么这个字段就会变成空的。
2 个回答
0
使用 default
这个模型字段参数来设置一个默认值。如果你不让这个字段在任何表单中被编辑,那么就会使用这个默认值。
只有在你想要改变默认值,或者如果你在模型或表单中还没有设置默认值时,才需要重写保存方法。
1
Django有自己设置默认值的方法。
class Student(models.Model):
name = models.TextField()
location = models.TextField(default="sample")
编辑1:
因为Django会重新初始化实例,所以你的值会被覆盖。改变顺序可能会有所帮助。
def __init__(self, *args, **kwargs):
super(Student, self).__init__(*args, **kwargs)
self.location="sample"
不过。
依赖Django内置的功能并传递命名参数是最简单的方法。编写一个可以在Django模型中使用的__init__函数