Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

520
Views
filtrado personalizado en django rest framework

Estoy tratando de implementar un filtrado personalizado en mi código y revisé la documentación. Pero no pude entender los siguientes fragmentos de los documentos.

 class UserFilter(django_filters.FilterSet): class Meta: model = User fields = ['username', 'last_login'] # or class UserFilter(django_filters.FilterSet): class Meta: model = User fields = { 'username': ['exact', 'contains'], 'last_login': ['exact', 'year__gt'], }

El documento dice que podemos usar el primero o el segundo, pero ¿cuál es la diferencia exacta? ¿Cuál es el significado de contiene y year_gt?

over 4 years ago · Santiago Trujillo
2 answers
Answer question

0

¿Cuál es la diferencia exacta?

Con fields = ['username', 'last_login'] , los filtros generados son:

qs.filter(username='some_value') y qs.filter(last_login=some_date_value)

Con

 fields = { 'username': ['exact', 'contains'], 'last_login': ['exact', 'year__gt'], }

los filtros generados son:

qs.filter(username='some_value') , qs.filter(username__contains='some_value') para el campo de nombre de username .

qs.filter(last_login=some_date_value) , qs.filter(last_login__year__gt=some_year_value) para el campo last_login .

Entonces, podemos ver a la primera que el segundo produce 2 opciones de filtro para cada campo, y el primero produce solo una opción de filtro ( exact match ) para el valor dado.

¿Cuál es el significado de contains y year__gt ?

contains se utiliza para filtrar por un valor que se puede encontrar dentro de un campo. ej: dj está en django .

year__gt por otro lado es solo para el campo de fecha. Cuando tiene un campo de fecha como created , Django le permite filtrar por year , month , day simplemente haciendo : .filter(created__year=2021, created__month=12) . Y más posibilidad por .filter(created__year__gt=2020) eso significa el año del campo creado> 2020 . Se puede aplicar a month__gt (mes > 11), day__lt (día < 25).

over 4 years ago · Santiago Trujillo Report

0

Hay un enlace en los documentos allí para los documentos de búsqueda de django también, y lo que encontrará con esto es que puede hacer que la búsqueda/filtrado sea más eficiente usando esa segunda opción.

La primera opción en los documentos, donde los fields son solo una lista, hará una consulta de coincidencia exacta con cada uno de los campos que enumere.

En la segunda opción, lo que hará la biblioteca de filtros con el diccionario de fields es usar la notación de "doble guión bajo" para crear búsquedas de;

  • username__exact
  • username__contains
  • last_login__exact
  • last_login__year__gt

Puede usar el guión bajo doble para acceder a un atributo de algo o al tipo de búsqueda. Entonces, en last_login para ese último ejemplo anterior, tomará el año del valor last_login y para ese año, el tipo de búsqueda es mayor que ( gt ).

Hay muchos de estos valores de búsqueda que pueden ser realmente útiles para aprender. Por ejemplo, contains distingue entre mayúsculas y minúsculas, pero puede usar icontains para una coincidencia que no distinga entre mayúsculas y minúsculas. También existe lt para menor que, o lte / gte para menor/mayor que o igual. Consulte las búsquedas disponibles aquí .

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!