Почему выбранные значения удаляются из мультиселектора на странице администратора? - PullRequest
1 голос
/ 21 июня 2019

Я написал multi-select form для страницы администратора. Выбранные данные сохраняются в базе данных, но по какой-то причине они не отображаются как выбранные (без свойства selected).

Когда я снова пытаюсь сохранить объект, я получаю сообщение об ошибке, что данные в этом поле не выбраны. Похоже, когда обновляешь страницу, выборки просто вылетают.

В чем может быть проблема?

Я использую Django 1.9 и django-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

admin 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>

1 Ответ

2 голосов
/ 22 июня 2019
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
...