我的模型中有以下代码
MY_CATEGORIES = (
('A', 'meal'),
('B', 'personal'),
)
######### and the model
class Job(models.Model):
category= models.CharField(max_length=1,choices=MY_CATEGORIES,default='A')
我想让选项列表可扩展,即如果用户想要的选项不存在,他们可以编写一个新选项,并且将来它可以作为选项使用。
我的模型中有以下代码
MY_CATEGORIES = (
('A', 'meal'),
('B', 'personal'),
)
######### and the model
class Job(models.Model):
category= models.CharField(max_length=1,choices=MY_CATEGORIES,default='A')
我想让选项列表可扩展,即如果用户想要的选项不存在,他们可以编写一个新选项,并且将来它可以作为选项使用。
您可以添加一个模型并通过夹具Category填充初始值。当用户输入一个不存在的类别时,您将创建一个新对象。mealpersonal
编辑:
基本上,您创建两个模型而不是一个模型,Job并且Category, 而Job有一个ForeignKeyto Category:
class Category(models.Model):
name = models.CharField(max_length=50)
class Job(models.Model):
category= models.ForeignKey(Category)
您不必自己创建任何表,syncdb 将在下次运行时处理它。
然后你创建一个fixture并把它放到fixtures你的应用程序的目录中。这将确保这两个条目始终存在:
[
{
"model": "myapp.category",
"pk": 1,
"fields": {
"name": "meal"
}
},
{
"model": "myapp.category",
"pk": 2,
"fields": {
"name": "personal"
}
}
]
请注意,您还可以在创建类别模型时通过类别模型的管理员输入这些条目。然后,您可以使用 dumpdata 来转储数据,因此您不必手动编写。
当然必须编写创建新类别实例的视图/表单逻辑。表格应该是非常标准的,一个ModelForm模型Job,加上一个输入新类别的附加字段应该可以完成这项工作。因此,您唯一需要考虑的是创建新条目的验证。表单将自动选择新条目,因为 a 默认ModelChoiceField包含所有条目。