2012-06-06 14 views

Respuesta

4

Es método muy simple que es difícilmente comparables con las aplicaciones, pero espero que lo encontrará útil:

class Author(models.Model): 
    name = models.CharField(max_length=100) 

    def latest_book(self): 
     return max(self.book_set.all(), key=lambda book: book.created) 

authors = Author.objects.prefetch_related('book_set') 
authors[0].latest_book() # what you wanted 
+1

Probé esto y parece generar las mismas consultas que el circuito ingenuo ... No creo que pueda usar select_related en una relación inversa – alan

+2

Lo siento, por supuesto, debe ser prefetch_related (edité mi respuesta) El uso de este conjunto de agujeros con todo() se capta previamente y su iteración no debería afectar a la base de datos. – jasisz

1

Sí, se puede hacer de esta manera:

authors=Author.objects.prefetch_related('book_set') 

Si desea filtrar por un atributo (nombre) presentes en el modelo de Autor podrá filtrar por escrito:

authors.filter(name='your_value') 

Pero si desea aplicar el filtro en el modelo de libros que tiene que escribir la siguiente manera:

authors.filter(book__created__gt='your_date') 

Esto hará f ilter todos los libros que tienen fecha de creación (atributo creado en el módulo Libro) mayor que su fecha.

Cuestiones relacionadas