Ошибка валидации формы Django (Select a valid choice) при использовании "queryset=Product.objects.none()"
Я использую formset_factory, когда получаю заказ на товары
product_formset = formset_factory(OrderProductsForm,extra=5)
Это работает, когда я использую "qeryset=Product.objects.all()" в "OrderProductsForm(forms.ModelForm):"
self.fields['product'] = ModelChoiceField(queryset=Product.objects.all(),empty_label="Ürün Seciniz", widget=forms.Select(attrs={"onChange":'stokKontrol(this.value,this.id)'}))
но он получает все продукты, поэтому время загрузки страницы увеличивается.
Я хотел бы использовать "queryset=Product.objects.none()".
Но в этот момент, когда я проверяю форму в моем view.py
if request.method == "POST":
formset = product_formset(request.POST)
if formset.is_valid():
получаем ошибку "Выберите правильный выбор. Этот выбор не является одним из доступных вариантов.". Есть ли у вас какое-нибудь предложение? Спасибо
Forms.py
class OrderProductsForm(forms.ModelForm):
class Meta:
model = OrderProducts
fields = ['amount']
def __init__(self, *args, **kwargs):
super(OrderProductsForm, self).__init__(*args, **kwargs)
self.fields['product_category'] = ModelChoiceField(queryset=ProductCategory.objects.all(),empty_label="Ürün Grubunu seciniz",
widget=forms.Select(attrs={"onChange":'myFunction(this.value,this.id)'}))
#self.fields['product'] = ModelChoiceField(queryset=Product.objects.all(),empty_label="Ürün Seciniz", widget=forms.Select(attrs={"onChange":'stokKontrol(this.value,this.id)'}))
self.fields['product'] = ModelChoiceField(queryset=Product.objects.none() ,empty_label="Ürün Seciniz",required=False,widget=forms.Select(attrs={"onChange":'stokKontrol(this.value,this.id)'}))
self.fields['stok'] = forms.CharField(required=False,disabled=True,max_length=5)
Я считаю, что вы неправильно понимаете использование objects.none()
. Смотрите здесь хорошее объяснение.
Product.objects.none()
- Сначала представляет собой пустой объект и используется в различных случаях. Когда вы устанавливаете это значение для queryset, вы инициализируете queryset пустым.
Ошибка
Выберите правильный выбор. Этот выбор не является одним из доступных вариантов.
ожидается, так как это не один из доступных вариантов для набора запросов. Чтобы ускорить увеличение другого метода, я бы предложил посмотреть на другие атрибуты для ускорения времени фильтрации. Это возможное решение, чтобы избежать перезагрузки каждый раз через использование django-cache
.