prefetch_related('имя менеджера')
Выполняет дополнительный (но один) запрос, чтобы закэшировать Many-to-Many элементы или One-to-Many, если элементы нашего QuerySet'а в отношении O2M являются One.
select_related('имя fk поля')
Выполняет JOIN таблицы, на которую ссылается ForeignKey (fk)
Например:
class SomeModel(Model):
items = ManyToManyField(Item)
# закэширует все Item каждого SomeModel двумя запросами
SomeModel.objects.all().prefetch_related('items')
# или
class SomeModel(Model):
pass
class Item(Model):
some_model = ForeignKey(SomeModel, related_name='itemz') # Обрати внимание на related_name
qs = SomeModel.objects.all().prefetch_related('itemz') # Опять 2 запроса
qs[0].itemz.all() # Не создаст запрос в БД
# Если же ты хочешь одним запросом получить
# SomeModel'ы Item'ов, то:
qs = Item.objects.filter(...).select_related('some_model')
qs[0].some_model # Не создаст запрос в БД