Django Admin删除选择

时间:2011-11-24 04:06:12

标签: django django-admin

我使用django admin来更新MySQL数据库上的各种数据。我使用基本的django管理员。在输入新数据时,我希望能够拥有它,以便人们只能从几个选项中选择输入新的文本数据。

例如: 该表保存颜色,因此,不是让管理员(我们的情况下的数据输入个人)只是在文本框中输入任何内容,我怎样才能让django管理员只给他们几个选项供选择?

2 个答案:

答案 0 :(得分:20)

这可以通过模型字段参数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

答案 1 :(得分:0)

最好在模型中定义“models.CharField”字段类型

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)