0
私はホームページに7つのランダムなオブジェクトを表示しています。そのために私はthis answerに基づくソリューションを使用します。すでにフェッチされたオブジェクトのリストに関連するオブジェクトをプリフェッチするにはどうすればよいですか?
class ProductManager(models.Manager):
def random(self, n_products, filter={}, select_related=None):
n_products_total = self.filter(**filter).count()
if n_products_total == 0:
return []
r = [self.random_impl(n_products_total, filter, select_related) for i in range(n_products)]
return [p for p in r if p is not None]
def random_impl(self, n_products, filter, select_related=None):
random_index = randint(0, n_products - 1)
try:
return self.filter(**filter) \
.select_related(select_related)[random_index]
except IndexError:
return None
random_products = Product.objects.random(7, filter={'enabled': True}, select_related='category')
私はprefetch_related=Prefetch('productphoto_set', queryset=ProductPhoto.objects.order_by('pk'))
random_impl
にメソッドを渡すと、それは製品ごとに一度に1枚の写真をプリフェッチ。それは驚くべきことではない。製品が既にフェッチされた後、関連するオブジェクトを手動でプリフェッチできますか?