Как избавиться от ошибки "Выберите правильный выбор. Этот выбор не является одним из доступных вариантов." при использовании поля ModelChoiceField?

Я пытаюсь вручную отобразить опции для формы select в шаблоне django. Когда я отправляю форму, я получаю ошибку: "Выберите правильный вариант. Этот выбор не является одним из доступных вариантов". Сообщение об ошибке также запрашивает обязательные поля, которые я предоставил.

locations models.py

class Location(models.Model):
    name = models.CharField(max_length=20)
    is_source = models.BooleanField(default=False)
    is_destination = models.BooleanField(default=False)

    def __str__(self):
        return self.name

orders forms.py

class OrderForm(ModelForm):
    source = forms.ModelChoiceField(queryset=Location.objects.filter(is_source=True))
    destination = forms.ModelChoiceField(queryset=Location.objects.filter(is_destination=True))

    class Meta:
        model = Order
        fields = ['source', 'destination', 'items']


    def save(self, commit=True):
        instance = super().save(commit=False)
        instance.order_number = math.floor(time.time())
        instance.type = 'Purchase'
        instance.customer = self.context.get('request').user
        instance.status = 'New'
        if commit:
            instance.save()

        return instance

Заказы создать.html

<form class="" method="POST">
                {% csrf_token %}
                <h1 class='text-center'>Make an order</h1>
                <div class='row'>
                    <div class='col-md-6 px-2'>
                        <span class="fw-bold mx-2">Buy from</span>
                        <div class="control-container  border-primary d-flex align-items-center">
                            <i class="fa fa-map"></i>
                            <select class="control ms-1 flex-grow-1" type="text" name="{{form.source.html_name}}"  required >
                                {% for value,label in form.source.field.choices %}
                                <option value="{{value}}">{{label}}</option>
                                {% endfor %}
                            </select>
                        </div>
                    </div>
                    <div class='col-md-6 px-2'>
                        <span class="fw-bold mx-2">Receive in</span>
                        <div class="control-container  border-primary d-flex align-items-center">
                            <i class="fa fa-map"></i>
                            <select class="control ms-1 flex-grow-1" type="text" name="{{form.destination.html_name}}"  required >
                                {% for value,label in form.destination.field.choices %}
                                <option value="{{value}}">{{label}}</option>
                                {% endfor %}
                            </select>
                        </div>
                    </div>
                </div>
                <div class='row'>
                    <div class='col-12 px-2'>
                        <span class="fw-bold mx-2">List items (e.g. 2 X Luxaire Double Bed matress)</span>
                        <div class="control-container  border-primary d-flex align-items-center">
                            <textarea class="control ms-1 flex-grow-1" rows="10" name="{{form.source.html_name}}" placeholder='e.g. 2 X Luxaire Double Bed matress' required></textarea>
                        </div>
                    </div>
                </div>
                <button type="submit" class="btn btn-primary w-100 ">Order</button>
            </form> 

вы не можете этого сделать, даже если вам удалось заставить форму игнорировать эту ошибку, модель будет выдавать ту же ошибку, потому что вы просто говорите ему выбрать значение из заданных значений... если вы хотите сделать это динамическим, то сделайте это как noraml CharFied()

В итоге я решил проблему, сделав поле customer в модели заказа нулевым. Я также задал неверное имя поля textarea в шаблоне создания заказа. Теперь все в порядке.

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