Django 1.6,如何为CreateView设置字段默认值

时间:2013-12-11 14:32:27

标签: python django django-models django-generic-views

models.py

class App(models.Model):
    name = models.CharField(max_length=10, default='')
    desc = models.CharField(max_length=10, default='') 

views.py

class AppCreate(CreateView):
    template_name = "app/add.html"
    model = App 

模板

<!DOCTYPE html>
<html lang="en">
<head>   
    <meta charset="UTF-8">
    <title></title>
</head>  
<body>   
    <form action="" method="POST">
    {% csrf_token %}                                                         
    {{form}}
    <input type="submit" value='submit'>
    </form>
</body>  
</html>  

这里有两个问题:

  1. 为什么我设置模型字段默认值,但它在数据库中不起作用?我检查sql语句,没有默认值设置

  2. 如果想将desc设置为可选字段(html中的desc字段不是必需的),我该怎么办?

2 个答案:

答案 0 :(得分:1)

默认值实际上纠正了对可选字段的需求。如果您没有输入任何值,则不会收到错误,但会存储默认值,这当然是空字符串(值)。要明确指定可选项,请使用blank=True

desc = models.CharField(max_length=10, blank=True)

可以使用

答案 1 :(得分:0)

在Django中为模型字段设置默认值时,它不包含在Django生成的SQL模式中。

只要您使用ORM创建模型实例,那么这无关紧要,因为Django将设置默认值。但是,如果使用原始SQL创建模型实例,则需要确保在需要时使用该字段的默认值。

有一个ticket 470用于向SQL架构添加默认值,但它已被关闭,因为无法修复。请记住,default可以是可调用的,也可以是常量,因此不可能将一些可调用的内容添加为SQL模式的默认值。

如果确实需要将默认值添加到SQL架构中,则可以手动运行alter table语句,或将其添加到迁移中。

要回答第二个问题,如果blank=True是可选的,请使用CharField