2012-04-20 49 views
0

所以新的Python &的Django沿着漂亮動人的一個項目,但無法找到任何簡單的回答上面的問題:Django的ModalChoiceField返回整數作爲默認值

模型都是這樣

class Projects(models.Model): 
    project_name = models.CharField(max_length=200) 
    project_description = models.TextField(blank=True)  
    active = models.BooleanField() 

    def __unicode__(self): 
     return self.project_name 

我有引用上述像

class Estimates(models.Model): 
    client = models.ForeignKey(Clients) 
    estimate_summary = models.CharField(max_length=200,blank=True) 
    project = models.ForeignKey(Projects,default=-1,blank=True) 

一個ForignKey其他車型,我知道我可以設置blank=False,以確保我得到一個有效的選擇,但我想讓他們選擇不分配項目的估計,在這種情況下,我會存儲一個默認的整數-1或什麼的。然而

問題是我無法弄清楚如何獲取表單使用一個整數作爲它的默認值,而不是「」 < - (空字符串)

<option selected="selected" value="">---------</option> 
<option value="1">Sample Project</option> 

我所見過的所有問題和答案圍繞將---------更改爲其他文本或強制您一起刪除空白選項。我只是想

<option selected="selected" value="-1">---------</option> 

所以我的形式將驗證

當寫完我想知道的問題,如果添加到窗體

field2 = forms.ModelChoiceField(queryset=..., empty_label=None) 
+1

爲什麼你需要'-1'值?外鍵可以添加約束到你的數據庫(如果它支持),你需要有'id = -1'的項目記錄 – San4ez 2012-04-20 05:37:25

回答

1

首先,當我可以插入一個選項,我和使用empty_label=None所有,你不想使用-1的整數作爲默認值。對於ForeignKeys,如果不需要它,通常使用null = True與blank = True結合使用(不要忘記刪除並重新創建表或使用south來遷移它 - 同樣也可以刪除默認值,因爲None是有效的選項null = True,因此不需要默認值)。這樣,如果你不分配一個項目,你將在數據庫中得到NULL,這也是Admin支持的--1將會破解更多而不是解決的問題。

只要您使用null = True,blank = True ModelChoiceField將自動按您的需要工作。

+0

謝謝我忽略了設置NULL的重要性,感謝您花時間指出它。 – Spaznuski 2012-04-20 15:54:49