Django 管理表单覆盖默认值

1 投票
2 回答
1803 浏览
提问于 2025-04-17 19:35

我在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__函数

撰写回答