2011-11-24 72 views
8

我使用django admin更新MySQL數據庫上的各種數據。我爲此使用基本的django管理員。當輸入新數據時,我希望能夠擁有它,這樣人們只能從幾個選項中選擇輸入新的文本數據。Django Admin下拉選擇

例如: 表中包含顏色,所以不要讓管理員(我們的案例中的數據輸入個人)在文本框中輸入任何內容,我怎樣才能讓django管理員只給他們幾個選項從中選擇?

回答

18

這可以通過模型字段參數進行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 
+0

我用浮漂使用它:MyField的= models.FloatField(選擇= [( '1.0', '1')]使用在管理下拉時,並獲得消息( 「沒有正確選擇1.0」)編輯。 – Timo