#python #django #filter #django-rest-framework
#питон #джанго #Фильтр #django-rest-framework
Вопрос:
я пытаюсь использовать SearchFilter в django, но я не понимаю, почему он не работает
вот мои модели:
class Country(models.Model):
'''
Modelo de pais
'''
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=70, verbose_name='Nombre de pais', null=False, blank=False)
class Category(models.Model):
'''
Modelo de categoria
'''
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=150, verbose_name='Nombre de ciudad', null=False, blank=False)
class Client(models.Model):
'''
Modelo de cliente
'''
id = models.AutoField(primary_key=True)
name_client = models.CharField(max_length=150, null=False, blank=False)
country = models.ForeignKey(Country, verbose_name='Client country', on_delete=models.PROTECT,
null=False, blank=False)
city = models.CharField(max_length=150, verbose_name='Ciudad de residencia', null=False, blank=False)
category = models.ForeignKey(Category, verbose_name='Client category', on_delete=models.PROTECT,
null=False, blank=False)
user_created = models.DateTimeField(auto_now_add=True)
is_active = models.BooleanField(default=True)
updated_at = models.DateTimeField(auto_now=True)
вот мое мнение:
class ClientViewset(viewsets.ModelViewSet):
"""
Api view encargada de administrar la
informacion del modelo cliente
"""
queryset = Client.objects.all()
serializer_class = ClientSerializer
filter_backends = (OrderingFilter, SearchFilter,)
search_fields = ('city')
когда я делаю запрос к своему API, я получаю все записи в базе данных для клиента модели.
Комментарии:
1. Убедитесь
search_fields
, что это кортеж или список. В вашем приведенном выше кодеsearch_fields
этоstring
не кортеж или список. Если хотите создать кортеж из 1 элемента, нужно добавить запятую.search_fields = ('city', )
2. При запросе neet на предоставление параметров quey в вашем URL:
http://example.com/api/users?search=rome
Ответ №1:
Я думаю, это потому, что вы не предоставляете параметры запроса конечной точке api.
Попробуйте
<api_endpoint>?city=rome