У меня вопрос по поводу оптимизации, ORM и шаблонов Django.
К примеру есть модель:
class MyModel(models.Model): name = models.CharField() to_model1 = models.ForeignKey(Model1) to_model2 = models.ManyToManyField(Model2)
Делаю запрос во вьюхе.
def myview(request): q = MyModel.objects.filter(to_model1__name='blahblah') render(request, 'blahblah.html', {'q': q})
В шаблоне:
{% for result in q %} {{ result.to_model1 }} {% endfor %}
Вопросы следующие:
1.
Насколько я понимаю, что если я изменю запрос во вьюхе на:
q = MyModel.objects.prefetch_related().filter(to_model1__name='blahblah')
Ведь данные из связанной таблицы (вариант выше) уже попадают в результат выборки благодаря - “to_model1__name”.
Или запрос к базе происходит когда я в шаблоне вызываю:
{{ result.to_model1 }}
2. Не могу понять в чём разница:
q = MyModel.objects.prefetch_related().filter(to_model1__name='blahblah')
q = MyModel.objects.filter(to_model1__name='blahblah').prefetch_related()
Данные
to_model2 = models.ManyToManyField(Model2)