Get_absolute_url очень занятая база данных
Когда я загружаю страницу продукта, я хочу, чтобы на этой странице предлагались другие продукты. Но при генерации абсолютного url для каждого продукта происходит обращение к базе данных. Соответственно, если на странице 10 товаров, то будет + 10 обращений к базе данных. Как можно уменьшить количество запросов к БД? Вот мой код:
models.py
class Goods(models.Model):
category = models.ForeignKey(Category,
related_name='goods',
on_delete=models.SET_NULL,
null=True)
name = models.CharField(max_length=150, db_index=True, verbose_name='название')
slug = models.CharField(max_length=150, db_index=True, unique=True, verbose_name='Слаг')
def get_absolute_url(self):
return reverse('goods_detail', kwargs={"category_slug[enter image description here][1]": self.category.slug, "goods_slug": self.slug})
urls.py
path('<slug:category_slug>/<slug:goods_slug>', views.GoodsDetailView.as_view(), name='goods_detail'),
views.py
class GoodsDetailView(DetailView):
model = Goods
context_object_name = 'goods'
slug_url_kwarg = 'goods_slug'
goods_detail.html
{% for i in goods.ingredients.all%}<br>
<a href="{{ i.get_absolute_url }}"> {{ i }}</a>
{% endfor %}
* На фото показан пример, если я отображаю 4 объекта на странице
Предполагается, что Ингредиент имеет связь foreignkey с Товарами
В вашем классе views.py вы можете предварительно загрузить информацию, получив дополнительный контекст (см. docs).
def get_context_data(self, **kwargs):
# Call the base implementation first to get a context
context = super().get_context_data(**kwargs)
# Add in a QuerySet of all the ingredients related to this object
context['ingredients'] = Ingredient.objects.filter(goods = self.get_object())
return context
тогда вы можете ссылаться на новый контекстный элемент в вашем шаблоне
{% for i in ingredients %}<br>
<a href="{{ i.get_absolute_url }}"> {{ i }}</a>
{% endfor %}