Django фильтрует запрос модели с помощью метода фильтра

#python #django

#python #django

Вопрос:

Почему этот код:

 products_model = Product.objects.filter(sub_category__name__iexact=sub)
supplier_filter = SupplierFilter(request.GET, queryset=products_model)
products = supplier_filter.qs
  

Выдает мне эту ошибку:

 Field 'id' expected a number but got 'BYGGMAX'.
  

У меня были проблемы с этим сейчас. Может кто-нибудь объяснить, что происходит. Когда я использую метод filter, фильтровать модель сложнее, как так? Действительно интересно узнать больше о том, как это работает.

Комментарии:

1. Можете ли вы предоставить детали модели?

Ответ №1:

Хотя я не знаю, что внутри request.GET , но кажется, что у него есть ключ id со значением 'BYGGMAX' . Итак, когда вы обращаетесь supplier_filter.qs , он пытается добавить фильтр с помощью id='BYGGMAX' . Но поскольку id поле является типом данных int, поэтому оно вызвало эту ошибку. Что вы можете сделать, так это убедиться, что id имеет правильное значение в request.GET или не передается id в request.GET соответствии с вашими потребностями.

Вы можете просмотреть кодовую базу, чтобы понять больше. https://github.com/carltongibson/django-filter/blob/56eaae15e4fab97483e1353080a0c320f18c1014/django_filters/filterset.py#L237