【问题标题】:MultipleChoiceField not showing stored values in Django AdminMultipleChoiceField 未在 Django Admin 中显示存储的值
【发布时间】:2012-03-18 07:43:50
【问题描述】:

如何让 MultipleChoiceField() 正确加载初始值?

我有一个带有 CharField 的 Django 模型,我在 admin 中将其呈现为 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值,但这似乎没有效果。

我做错了什么?

【问题讨论】:

    标签: python django django-models django-admin


    【解决方案1】:

    您需要在表单的初始值(字典)中设置值

    def __init__(self, *args, **kwargs):
        super(MyModelInlineForm, self).__init__(*args, **kwargs)
        self.initial['my_text_field'] = eval(self.initial['my_text_field'])
    

    【讨论】:

      【解决方案2】:

      您需要在表单的initial(字典)中设置值,而不是字段的:

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

      【讨论】:

      • 我还必须添加自定义 clean_* 方法来将我的选定值列表转换为友好的内容以保存到数据库中的文本字段。默认情况下,Django 只存储列表的字符串表示形式,后面的初始字典无法使用。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-03
      • 2016-06-02
      • 2021-02-24
      • 2012-09-28
      • 2019-10-12
      • 2017-09-14
      相关资源
      最近更新 更多