1

我的模型中有以下代码

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

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

我想让选项列表可扩展,即如果用户想要的选项不存在,他们可以编写一个新选项,并且将来它可以作为选项使用。

4

1 回答 1

1

您可以添加一个模型并通过夹具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包含所有条目。

于 2013-02-10T20:40:13.803 回答