2013-12-11 83 views
1

models.py的Django 1.6,如何设置字段默认值CreateView的

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字段不是强制性的),我该怎么做?

回答

1

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

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

可用于

+0

那么如何定义一个字段是可选的? – linbo

+0

@linbo:结帐 –

+2

如果CharField是可选的,则使用'blank = True'。为'CharField'设置'null = True'通常是一个坏主意(参见[文档](https://docs.djangoproject.com/en/1.6/ref/models/fields/#null) )。 – Alasdair

0

当您为在Django模型字段的默认,它不包含在Django在生成的SQL模式。

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

有一个ticket 470用于将默认值添加到SQL架构,但它已关闭,因为不会修复。请记住,default可以是可调用的,也可以是常量,所以不可能将一些可调参数作为默认值添加到SQL模式中。

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

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

相关问题