Динамическое создание поля множественного выбора

Моя цель - создать django форму для выбора устройств, отфильтрованных по полям страны и клуба. Моя форма выглядит следующим образом:

class MyForm(Form):
    country = ChoiceField(choices=some_choices, initial=None)
    club = CharField(widget=Select())
    expiration_date = DateField()
    sales_info = ChoiceField(choices=SALES_TYPES, initial=None)
    devices = MultipleChoiceField(widget=CheckboxSelectMultiple(choices=[]))
    
    def clean_devices(self):
        devices = self.cleaned_data.get("devices")
        if not devices:
            raise ValidationError("At least one device must be selected.")
        return devices

    def save(self):
        ...

views.py

class MyFormView(LoginRequiredMixin, FormView):
    template_name = "store/my_template.html"
    form_class = MyFormView

    def get_success_url(self):
        return reverse('init_device')

    def form_valid(self, form):
        init_device = form.save()
        if init_device:
            return super().form_valid(form)

        return super().form_invalid(form)

    def form_invalid(self, form):
        logger.error(form.errors)

my_template.html

    <form action="{% url 'init_device' %}" method="post">
        {% csrf_token %}
        ...
        <select id="id_devices" name="devices" multiple>

Я заполняю поле select через javascript таким образом:

let device_select = document.getElementById("id_devices");
        serialIds.forEach(serialId => {
            let option = document.createElement("option");
            option.text = serialId;
            option.value = serialId;
            device_select.add(option);
        });

Я получил отфильтрованные устройства формы db с помощью websocket, но теперь я не могу передать их в форму, потому что возникает эта ошибка: ValueError: The view path.view didn't return an HttpResponse object. It returned None instead.

Затем я печатаю form.errors и это отображается <ul class="errorlist"><li>devices<ul class="errorlist"><li>Select a valid choice. device_attriubte is not one of the available choices.</li></ul></li></ul>

Может ли кто-нибудь помочь мне? Заранее спасибо!

Слишком много сразу?

Сначала получите от пользователя выбор страны и клуба и подтвердите их, насколько это возможно. Когда это будет сделано, перенаправьте на URL-адрес, например

app/choose_device/country/club

и в представлении, которое вызывается, используйте kwargs country и club в queryset своей формы ModelMultipleChoiceField. Это нормализуется до списка экземпляров моделей (объектов устройств), когда форма проходит валидацию.

(Я предполагаю, что устройства являются объектами в вашей БД. Это подразумевается вашим использованием "filtered", но не является явным).

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