.
Django-prefetch genel model ile ilgili veri prefetch Django için çerçeve & nbsp sunar; veri haritalama fuctions yazma pahasına Django 1,4 en prefetch_related QuerySet yönteminden daha fazla esneklik sağlar.
Kurulum kılavuzu
Bunu yükleyin:
Django-ön alma yüklemek pip
Senin modelin varsayılan yöneticisi olarak kullanın (veya özel yöneticisi varsa, bir temel sınıf olarak).
Örnek
Burada (Eğer QuerySet üzerinde ön alma demiyorlar varsa) oldukça düzenli 1 + n sorguları bir geri dönüş ile örnek ayrıntılı var:
django.db ithalat modelleri
prefetch ithalat PrefetchManager, Prefetcher gelen
Sınıf Yazar (models.Model):
& Nbsp; name = models.CharField (max_length = 100)
& Nbsp; nesneleri = PrefetchManager (
& Nbsp; kitaplar = Prefetcher (
& Nbsp; filtre = lambda kimlikleri: Book.objects.filter (author__in = kimlikleri),
& Nbsp; reverse_mapper = lambda kitap: [book.author_id],
& Nbsp; dekoratör = lambda yazar, kitap = (): setattr (yazar, 'prefetched_books', kitaplar)
& Nbsp;),
& Nbsp; latest_book = Prefetcher (
& Nbsp; filtre = lambda kimlikleri: Book.objects.filter (author__in = kimlikleri),
& Nbsp; reverse_mapper = lambda kitap: [book.author_id],
& Nbsp; dekoratör = lambda yazar, kitap = (): setattr (
& Nbsp; yazar,
& Nbsp; 'prefetched_latest_book'
& Nbsp; max (kitaplar, lambda kitap: book.created)
& Nbsp;)
& Nbsp;)
& Nbsp;)
& Nbsp;property
& Nbsp; def kitapları (self):
& Nbsp; eğer hasattr (kendini, 'prefetched_books'):
& Nbsp; self.prefetched_books dönüş
& Nbsp; else:
& Nbsp; dönüş self.book_set.all ()
& Nbsp;property
& Nbsp; def latest_book (öz):
& Nbsp; eğer hasattr (kendini, 'prefetched_latest_book'):
& Nbsp; dönüş self.prefetched_latest_book
& Nbsp; else:
& Nbsp; dönüş self.book_set.latest ()
sınıf Kitabı (models.Model):
& Nbsp; sınıf Meta:
& Nbsp; get_latest_by = 'yarattı'
& Nbsp; name = models.CharField (max_length = 100)
& Nbsp; yaratılan = models.DateTimeField (auto_now_add = true)
& Nbsp; yazar = models.ForeignKey (Yazar)
Bu gibi kullanın:
Author.objects.prefetch bir ('kitap', 'latest_book') için:
& Nbsp; baskı a.books
& Nbsp; baskı a.latest_book
Gereksinimler :
- Python
- Django
Yorum Bulunamadı