django-prefetch oferă generic cadru prefetch de date referitoare model de Django. & Nbsp; Ofera o mai mare flexibilitate decât Django 1,4 de metodă queryset prefetch_related la costul de scriere a fuctions de cartografiere pentru datele.
Ghid de instalare
Instalați-l:
Pip instala django-prefetch
Folositi-l ca director implicit modelul dumneavoastră (sau ca o clasa de baza daca ai director personalizat).
Exemplul
Iată un exemplu destul de elaborat, cu o rezervă pe obisnuiti 1 + n interogări (daca nu suna prefetch pe queryset):
din modelele django.db de import
de la PrefetchManager import prefetch, Prefetcher
Clasa de Autor (models.Model):
& Nbsp; name = models.CharField (MAX_LENGTH = 100)
& Nbsp; obiecte = PrefetchManager (
& Nbsp; Cărți = Prefetcher (
& Nbsp; filtru = ID-uri lambda: Book.objects.filter (author__in = id-uri),
& Nbsp; reverse_mapper = carte lambda: [book.author_id],
& Nbsp; decorator = lambda autor, cărți = (): setattr (autor, "prefetched_books", cărți)
& Nbsp;),
& Nbsp; latest_book = Prefetcher (
& Nbsp; filtru = ID-uri lambda: Book.objects.filter (author__in = id-uri),
& Nbsp; reverse_mapper = carte lambda: [book.author_id],
& Nbsp; decorator = lambda autor, cărți = (): setattr (
& Nbsp; autor,
& Nbsp; "prefetched_latest_book",
& Nbsp; max (cărți, carte lambda: book.created)
& Nbsp;)
& Nbsp;)
& Nbsp;)
& Nbsp;property
& Nbsp; Cărți definiție (auto):
& Nbsp; dacă hasattr (auto, "prefetched_books"):
& Nbsp; a reveni self.prefetched_books
& Nbsp; altfel:
& Nbsp; self.book_set.all retur ()
& Nbsp;property
& Nbsp; def latest_book (auto):
& Nbsp; dacă hasattr (auto, "prefetched_latest_book"):
& Nbsp; self.prefetched_latest_book întoarcere
& Nbsp; altfel:
& Nbsp; self.book_set.latest retur ()
clasă Book (models.Model):
& Nbsp; clasă Meta:
& Nbsp; get_latest_by = 'creat'
& Nbsp; name = models.CharField (MAX_LENGTH = 100)
& Nbsp; a creat = models.DateTimeField (auto_now_add = True)
& Nbsp; autor = models.ForeignKey (Autor)
Folositi-l ca aceasta:
pentru o în Author.objects.prefetch ("cărți", "latest_book"):
& nbsp; a.books de imprimare
& Nbsp; a.latest_book imprimare
Cerințe :
- Python
- Django
Comentariile nu a fost găsit