На каждый комментарий создается заброс к бд, а если комментарий с фото, то 2 запроса. Комментарии имеют 2 уровня вложенности. Можно ли сократить количество запросов средствами ORM?
models.py
class Comment(models.Model):
post = models.ForeignKey(
Post, on_delete=models.CASCADE, blank=False, null=False, related_name='comments')
user = models.ForeignKey(
User, on_delete=models.CASCADE, blank=False, null=False)
parent = models.ForeignKey(
'self', on_delete=models.CASCADE, blank=True, null=True, related_name='children')
text = models.CharField(max_length=1000, blank=False, null=False, verbose_name='комментарий')
class Photo(models.Model):
comment = models.ForeignKey(
Comment, null=True, blank=True, on_delete=models.CASCADE, related_name='user_photos')
photo = models.ImageField(upload_to='user-photo/')
templatestags/comments.py
@register.inclusion_tag('comment/comments.html')
def comments(post: 'Queryset[Post]'):
comments = Comment.objects.filter(
post=post).prefetch_related('user_photos', 'children').select_related('user', 'parent')
return {
'comments': comments,
'name': post.name
}
comment/comments.html
{% for i in comments %}
{% if not i.parent %}
{{ i.text }}
{% if i.user_photos.all %}
{% for img in i.user_photos.all %}
<img src="{{ img.thumb.url }}">
{% endfor %}
{% endif %}
{% if i.children %}
{% for child in i.children.all %}
{{ child.text }}
{% for img in child.user_photos.all %}
<img src="{{ img.thumb.url }}">
{% endfor %}
{% endfor %}
{% endif %}
{% endif %}
{% endfor %}
Оборачивание Comment.objects.filter в list или перебор через for in не помогают.