2013-02-10 51 views
0

同時接受預設選擇和增加了一個新的選擇,我有在我的模型下面的代碼如何使一個Django choicefield用戶

MY_CATEGORIES = (
('A', 'meal'), 
('B', 'personal'), 
) 

######### and the model 
class Job(models.Model): 
    category= models.CharField(max_length=1,choices=MY_CATEGORIES,default='A') 

我想提出的選擇擴展列表,即如果用戶想要的選擇不存在,他們可以寫一個新的,並且將來它可以作爲選擇。

回答

1

您可以添加Category模型並通過fixture填充初始值mealpersonal。當用戶輸入一個不存在的類別時,您可以創建一個新對象。

編輯

基本上你創建了兩個模型,而不是一個,JobCategory,而JobForeignKeyCategory

class Category(models.Model): 
    name = models.CharField(max_length=50) 

class Job(models.Model): 
    category= models.ForeignKey(Category) 

您不必在創建任何表你自己的,syncdb將在下一次運行中處理它。

然後,您創建一個燈具並將其放入您的應用程序的fixtures目錄中。這將確保這兩個條目始終存在:請注意,您也可以在創建類別模型的管理員時通過管理員輸入這些條目。然後,您可以使用dumpdata來轉儲數據,因此您無需親自編寫該數據。

創建新類別實例的視圖/表單邏輯當然要寫入。表格應該非常標準,Job模型的ModelForm,另外還有一個輸入新類別的字段應該可以完成這項工作。所以你唯一需要考慮的是驗證創建新條目。表單將自動選取新條目,因爲ModelChoiceField的默認值將包含所有條目。

+0

所以我必須創建一些代碼來檢查類別是否存在?會涉及到在數據庫中創建新表?以及我將來如何能夠提供相同的類別?是通過使用獨特的過濾器來挑選類別嗎? – mike 2013-02-11 06:52:28

+0

我已經更新了我的答案。 – 2013-02-11 09:44:49