Django模型中字段的默认值

Yuv*_*dam 89 python django django-models django-admin

假设我有一个模型:

class SomeModel(models.Model):
    id = models.AutoField(primary_key=True)
    a = models.CharField(max_length=10)
    b = models.CharField(max_length=7)
Run Code Online (Sandbox Code Playgroud)

目前我使用默认管理员来创建/编辑此类型的对象.如何b从管理员中删除该字段,以便无法使用值创建每个对象,而是将接收默认值0000000

Fog*_*ird 141

设置editableFalsedefault默认值.

http://docs.djangoproject.com/en/dev/ref/models/fields/#editable

b = models.CharField(max_length=7, default='0000000', editable=False)
Run Code Online (Sandbox Code Playgroud)

此外,您的id领域是不必要的.Django会自动添加它.

  • 字段的默认值意味着该字段不可编辑? (2认同)

And*_*are 21

您可以像这样设置默认值:

b = models.CharField(max_length=7,default="foobar")
Run Code Online (Sandbox Code Playgroud)

然后你可以用模型的Admin类隐藏字段,如下所示:

class SomeModelAdmin(admin.ModelAdmin):
    exclude = ("b")
Run Code Online (Sandbox Code Playgroud)


MrO*_*les 19

您还可以在默认字段中使用callable,例如:

b = models.CharField(max_length=7, default=foo)
Run Code Online (Sandbox Code Playgroud)

然后定义可调用的:

def foo():
    return 'bar'
Run Code Online (Sandbox Code Playgroud)

  • 这在1.8中似乎不起作用,尽管文档表明它应该.`foo()`应该是一个类方法吗? (4认同)
  • 您可能必须在foo函数周围设置`@ staticmethod`包装器. (3认同)