2010-05-16 6 views
3

Compte tenu d'une structure de modèle comme celui-ci:Cette requête Django peut-elle être améliorée?

class Book(models.Model): 
    user = models.ForeignKey(User) 

class Readingdate(models.Model): 
    book = models.ForeignKey(Book) 
    date = models.DateField() 

Un livre peut avoir plusieurs Readingdate s.

Comment puis-je lister les livres ayant au moins un Readingdate dans une année spécifique?

Je peux le faire:

from_date = datetime.date(2010,1,1) 
to_date = datetime.date(2010,12,31) 

book_ids = Readingdate.objects\ 
      .filter(date__range=(from_date,to_date))\ 
      .values_list('book_id', flat=True) 

books_read_2010 = Book.objects.filter(id__in=book_ids) 

Est-il possible de le faire avec un queryset, ou est-ce la meilleure façon?

Répondre

5
Book.objects.filter(readingdate__date__year=2010) 
Questions connexes