Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

367
Vistas
Django rest framework: devuelve objetos ordenados por el resultado del método invocable

Entonces, básicamente, el título lo dice todo: ¿cómo puedo ordenar el conjunto de consultas que se devolverá en la API mediante un resultado de método invocable que no está almacenado en la base de datos?

Este campo es dinámico y depende de la solicitud de cada usuario, por lo que no se puede almacenar en ningún lado.

Intenté simplemente usar, que es lo que quiero lograr:

 queryset = Post.objects.filter('my_filters').order_by('my_method')

pero no funciona ya que tiene que ser una columna en la base de datos.

También probé:

 queryset = sorted(Post.objects.filter('my_filters'), key=lambda x: x.my_method())

Pero arroja el error "AttributeError: el objeto 'lista' no tiene atributo 'modelo'".

Entonces, ¿cómo puedo ordenar los resultados del conjunto de consultas de acuerdo con un método? ¿Algunas ideas? También tendré que limitar el número de respuestas a los mejores resultados calculados de esta manera.

¡Gracias!

EDITAR:

'my_filters' en este caso solo verifica una propiedad booleana

 .filter(active=True)

y my_method comprueba el tiempo transcurrido comparándolo con timezone.now():

 def microseconds_elapsed(self): return getMicrosecondsElapsed(self.datetime)

donde

 def getMicrosecondsElapsed(datetime): timedelta = timezone.now() - datetime microseconds = 0 microseconds += timedelta.microseconds microseconds += timedelta.seconds*1000000 microseconds += timedelta.days*86400000000 return microseconds

He progresado un poco usando las funciones de anotación y PostgreSQL usando:

 get_queryset().annotate(time_elapsed=Func(F('datetime'), function='age'))

pero esto da como resultado un error de django

El argumento float() debe ser una cadena o un número

En este caso, solo necesito obtener la cantidad de microsegundos transcurridos del campo de fecha y hora almacenado en el objeto para poder continuar con otro cálculo.

¿Alguien sabe qué está pasando y cómo puedo lograr esto?

¡Gracias!

over 4 years ago · Santiago Trujillo
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda