When I load a product page, I want other products to be offered on that page. But when generating an absolute url for each product, the database is accessed. Accordingly, if there are 10 products on the page, then there will be + 10 calls to the database How can i reduce the number of queries in the db? It`s my code:
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 %}
*The photo shows an example if I display 4 objects on a page
Assuming Ingredient has a foreignkey relationship to Goods
In your views.py class you can preload the information by getting additional context (see docs).
then you can refer to the new context element in your template