2013-12-11 79 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是可選的。

相關問題