我使用Django管理工具来更新MySQL数据库中的各种数据。使用基本的Django管理工具。在输入新数据时,我希望人们只能从几个选项中选择来输入新的文本数据。
例如: 表格包含颜色信息,因此不要让管理员(数据录入人员)只是随意在文本框中输入任何内容,我该如何让Django管理工具仅提供几个选项供他们选择?
我使用Django管理工具来更新MySQL数据库中的各种数据。使用基本的Django管理工具。在输入新数据时,我希望人们只能从几个选项中选择来输入新的文本数据。
例如: 表格包含颜色信息,因此不要让管理员(数据录入人员)只是随意在文本框中输入任何内容,我该如何让Django管理工具仅提供几个选项供他们选择?
可以通过模型字段参数choices
来实现。
myfield = models.CharField(max_length=256, choices=[('green', 'green'), ('red', 'red')])
这样做的唯一问题是,如果您在数据库中已经有一个与这些值不匹配的值,Django 可能会将其默认为其中一个选项。ChoiceField
,或者动态添加任何数据库中存在的值作为有效选项之一。class MyForm(ModelForm):
MY_CHOICES = [('green', 'green'), ('red', 'red')]
def __init__(self, *args, **kwargs):
super(MyForm, self).__init__(*args, **kwargs)
if self.instance.id:
CHOICES_INCLUDING_DB_VALUE = [(self.instance.field,)*2] + self.MY_CHOICES
self.fields['my_field'] = forms.ChoiceField(
choices=CHOICES_INCLUDING_DB_VALUE)
class MyAdmin(admin.ModelAdmin):
form = MyForm
your_choices = (
('1', u'yello'),
('2', u'red'),
('3', u'black'),
)
types = models.CharField(max_length=32, choices=your_choices, null=True, blank=True)
然后在 "admin.py" 中,您应该像下面这样在自定义管理类中添加这个新字段。
class YourModelAdmin(admin.ModelAdmin):
fields = ('types', )
admin.site.register(YourModel, YourModelAdmin)