2012-02-28 93 views
3

如何获得MultipleChoiceField()以正确加载初始值?MultipleChoiceField在Django Admin中未显示存储值

我有一个CharField的Django模型,我在管理中将它作为MultipleChoiceField()呈现,因为我想将其值限制为一个或多个特定选项。

我的代码看起来是这样的:

class MyModelInlineForm(ModelForm): 

    my_text_field = forms.MultipleChoiceField(required=False) 

    def __init__(self, *args, **kwargs): 
     super(MyModelInlineForm, self).__init__(*args, **kwargs) 

     self.fields['my_text_field'].choices = get_choices(self.instance) 

     if self.instance: 
      self.fields['my_text_field'].initial = self.instance.my_text_field 

class MyModelInline(admin.TabularInline): 
    model = MyModel 
    form = MyModelInlineForm 
    extra = 0 

这似乎呈现罚款,但是当我选择值并保存,新的形式加载,没有选择的值。我已经确认该值正在被正确保存在数据库中,但表单没有加载它,我不知道为什么。

基于一些similarquestions,我试着明确设置initial我的模型保存字段的值,但这似乎没有效果。

我在做什么错?

回答

4

您需要设置窗体的initial(字典)的值,而不是字段的:

if self.instance: 
    self.initial['my_text_field'] = self.instance.my_text_field 
+0

我也不得不添加自定义clean_ *方法,我选择值的列表转换的东西友好保存到数据库中的文本字段。默认情况下,Django只是存储列表的字符串表示,以后不能用于初始字典。 – Cerin 2012-02-28 21:45:19

相关问题