Django поле multi select сохраняет только одно значение

У меня есть форма, в которой можно выбрать провинцию и ее города. Вот модель, которую использует моя форма в моем приложении:

class ScientificSchedule(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    province = models.CharField(max_length=100, blank=True)
    city = models.CharField(max_length=2048, blank=True)
    #other fields

и форма:

class ScientificScheduleForm(forms.ModelForm):

    class Meta:
        model = ScientificSchedule
        fields = '__all__'

также вот мои взгляды и HTML код:

class ScientificScheduleView(FormView):
    model = ScientificSchedule
    template_name = 'reg/scientific-schedule.html'
    form_class = ScientificScheduleForm
    success_url = '/scientific/schedule'

    def post(self, request):
        form = ScientificScheduleForm(request.POST)
        if form.is_valid():
            return self.form_valid(form)
        else:
            return self.form_invalid(form)

    def form_valid(self, form):
        form.save()
        return super(ScientificScheduleView, self).form_valid(form)

а это часть формы для полей города и провинции:

<form id="manager-users" method="POST" autocomplete="off" class="ant-form ant-form-horizontal">
{% csrf_token %}

<div class="ant-row-flex ant-row-flex-space-between" style="margin-left: -10px; margin-right: -10px;">
    <div class="ant-col ant-col-xs-24 ant-col-md-12" style="padding-left: 10px; padding-right: 10px;">
        <div class="ant-row ant-form-item formItemRow">
            <div class="ant-col ant-form-item-label"><label for="province" class="ant-form-item-required" title="province">province</label></div>
            <div class="ant-col ant-form-item-control-wrapper">
                <div class="ant-form-item-control has-success">
                    <span class="ant-form-item-children">
                        <div id="province" class="ant-select ant-select-selection ant-select-selection--single" style="width: 100%;">
                            <select name="province" class="ant-col ant-select-selection ant-select-selection--single" role="combobox" aria-autocomplete="list" aria-haspopup="true" tabindex="-1">
                                <option value="" class=""> - </option>
                            </select>
                        </div>
                    </span>
                </div>
            </div>
        </div>
    </div>
    <div class="ant-col ant-col-xs-24 ant-col-md-12" style="padding-left: 10px; padding-right: 10px;">
        <div class="ant-row ant-form-item formItemRow">
            <div class="ant-col ant-form-item-label"><label for="city" class="ant-form-item-required" title="city">city</label></div>
            <div class="ant-col ant-form-item-control-wrapper">
                <div class="ant-form-item-control has-success">
                    <span class="ant-form-item-children">
                        <div id="city" class="ant-select ant-select-selection ant-select-selection--single" style="width: 100%;">
                            <select multiple name="city" class="ant-col ant-select-selection ant-select-selection--single" role="combobox" aria-autocomplete="list" aria-haspopup="true" tabindex="-1" id="set-multi">
                                <option value="" class="" selected> - </option>
                            </select>
                        </div>
                    </span>
                </div>
            </div>
        </div>
    </div>
    <div style="display: flex; justify-content: flex-end; margin-top: 1rem;">
        <input id="btn_submit" type="submit" value="submit" class="ant-btn ant-btn-primary" />
    </div>
</div>

Самое интересное в этих полях то, что поле города будет показывать только города в выбранной провинции. Поэтому сначала пользователь не может выбирать города, он должен выбрать одну провинцию, а затем выбрать 1, несколько или все города. Однако при отправке формы сохраняется только последний вариант, который я выбрал для города. Например, я выбираю city1, city4 и city5, но сохраняется только city5. как я могу сохранить это поле как список? Я хочу сохранить ['city1','city4','city5'] в поле city моей модели. спасибо за ответы

Трудно сказать, что именно вам нужно сделать, но я полагаю, что в вашей модели ScientificSchedule у вас есть только 1 город как строка (т.е. в каждом расписании есть 1 город). Следовательно, вы не можете послать более одного города в эту таблицу, так как ей нужно только одно поле char!

Возможно, вам следует рассмотреть возможность использования ManyToManyField вместо CharField и сохранить города в вашей базе данных.

В противном случае необходимо убедиться, что CharField может хранить список. Вы можете сделать это вручную или использовать JsonField или ArrayField (если вы используете Postgres).

В основном проблема, которую я пытаюсь осветить, заключается в том, что у вас есть CharField для хранения 1 города, но вы хотите хранить несколько городов!

Вернуться на верх