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>
这里有两个问题:
为什么我设置模型字段默认值,但它在数据库中不起作用?我检查sql语句,没有默认值设置
如果想将desc设置为可选字段(html中的desc字段不是必需的),我该怎么办?
答案 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
。