【问题标题】:Why are the selected values removed from the multi select in the admin page?为什么从管理页面的多选中删除选定的值?
【发布时间】:2019-11-04 16:06:02
【问题描述】:

我为管理页面写了一个multi-select form。选择的数据保存在数据库中,但由于某种原因它没有显示为已选择(没有selected 属性)。

当我再次尝试保存对象时,我收到一个错误,即未选择此字段中的数据。似乎刷新页面时,选择就飞走了。

可能是什么问题?

我正在使用Django 1.9django-jet

models.py

registration = models.CharField(_('registration'), max_length=255)

forms.py

class ConditionAdminForm(forms.ModelForm):
    REGISTRATION_CHOICES= (
        ('Any', _('Any')),
        ('Constant', _('Constant')),
        ('Temporary', _('Temporary')),
    )

    registration = forms.MultipleChoiceField(choices = REGISTRATION_CHOICES, label=_("registration form"))

    def clean_registration(self):
        registration = self.cleaned_data['registration']
        if not registration:
            raise forms.ValidationError("...")

        registration = ', '.join(registration)
        return registration

    class Meta:
        model = Condition
        fields = '__all__'

admin.py

class ConditionInlineAdmin(admin.StackedInline):
    model = Condition
    form = ConditionAdminForm

管理 html

<div class="form-row field-registration">
  <div>
    <label class="required" for="id_condition_set-0-registration">registration:</label>
    <select multiple="" id="id_condition_set-0-registration" name="condition_set-0-registration" tabindex="-1" class="select2-hidden-accessible" aria-hidden="true">
      <option value="Any">Any</option>
      <option value="Constant">Constant</option>
      <option value="Temporary">Temporary</option>
    </select>
    <span class="select2 select2-container select2-container--jet" dir="ltr" style="width: auto;">
      <span class="selection">
        <span class="select2-selection select2-selection--multiple" role="combobox" aria-autocomplete="list" aria-haspopup="true" aria-expanded="false" tabindex="0">
          <ul class="select2-selection__rendered">
            <li class="select2-search select2-search--inline">
              <input class="select2-search__field" type="search" tabindex="-1" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" role="textbox" placeholder="" style="width: 0.75em;">
            </li>
          </ul>
        </span>
      </span>
      <span class="dropdown-wrapper" aria-hidden="true"></span>
    </span>
  </div>
</div>

【问题讨论】:

    标签: django django-models django-forms django-templates django-admin


    【解决方案1】:
    def __init__(self, *args, **kwargs):
        super(ConditionAdminForm, self).__init__(*args, **kwargs)
        obj = kwargs.get('instance')
        if obj:
            initial = [i for i in obj.registration.split(', ')]
            self.initial['registration'] = initial
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-05
      • 1970-01-01
      • 2011-08-10
      • 1970-01-01
      • 2021-09-30
      • 1970-01-01
      • 1970-01-01
      • 2017-01-07
      相关资源
      最近更新 更多