【问题标题】:Django admin form overriding the default value覆盖默认值的 Django 管理表单
【发布时间】:2013-03-19 03:36:11
【问题描述】:

我正在像这样在 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)

然后commig为空

【问题讨论】:

  • 发布StudentAdmin的代码

标签: python django


【解决方案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 的内置功能并传递命名 参数将是最简单的方法。 Writing a __init__ function to be used in django model

【讨论】:

  • 但是我的方法有什么问题
  • 您可以更改顺序以使您的位置分配有效。但是,它仍然可能导致另一个问题。
【解决方案2】:

使用default 模型字段参数设置默认值。如果您在任何形式中排除该字段不被编辑,则将使用默认值。

如果您想更改默认值,您只需要覆盖保存方法,或者如果您还没有在模型或表单中这样做,则设置一个。

【讨论】:

    猜你喜欢
    • 2011-01-24
    • 1970-01-01
    • 2014-01-05
    • 2013-08-03
    • 2016-07-29
    • 1970-01-01
    • 1970-01-01
    • 2010-12-01
    • 2019-05-22
    相关资源
    最近更新 更多