2013-02-10 54 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