Джанго одобрил комментарии - PullRequest
2 голосов
/ 03 июля 2019

Во-первых, моя проблема в том, что я беру комментарии с statusc = 2, и у меня нет проблем. Но с этим кодом {% for reply in comment.replies.all%} появляется со всеми одобренными или неотвеченными ответами

views.py

comments=Comment.objects.filter(post=post,reply=None,statusc=2).order_by('-date').....

Model.py

class Comment(models.Model):
STATUS_C_DRAFT = 1
STATUS_C_PUBLISHED = 2
STATUSES_C = (
    (STATUS_C_DRAFT, 'Draft'),
    (STATUS_C_PUBLISHED, 'Published'),
)
post=models.ForeignKey(Post,verbose_name='post',related_name='comment',on_delete=models.CASCADE)
name=models.CharField(verbose_name="name",max_length=60,blank=False)
email=models.EmailField(max_length=120,blank=False,verbose_name="email")
comment=models.TextField(max_length=1000,verbose_name="comment")
reply=models.ForeignKey('Comment',null=True,related_name='replies',on_delete=models.CASCADE)
date=models.DateTimeField(auto_now_add=True)
statusc = models.SmallIntegerField(choices=STATUSES_C,default=STATUS_C_DRAFT)

HTML-страница

 {% for comment in comments %}
                      <!-- POST COMMENT -->
      <div class="post-comment">

        <!-- POST COMMENT USERNAME -->
        <p class="post-comment-username">{{ comment.name }}</p>
        <!-- /POST COMMENT USERNAME -->.... 

        {% for reply in comment.replies.all %}
           <div class="post-comment">

          <!-- POST COMMENT USERNAME -->
          <p class="post-comment-username">{{ reply.name }}</p>
          <!-- /POST COMMENT USERNAME -->...                               
        {% endfor%}
  {%endfor%}

1 Ответ

3 голосов
/ 03 июля 2019

Вы можете использовать здесь объект Prefetch для предварительной выборки отфильтрованного набора запросов, например:

from django.db.models import <b>Prefetch</b>

comments = Comment.objects.filter(
    post=post, reply=None, statusc=2
).prefetch_related(
    <b>Prefetch('replies', Comment.objects.filter(statusc=2).order_by('-date'), to_attr='approved_replies')</b>
).order_by('-date')

, а затем вы можете отобразить его с помощью:

{% for reply in comment.<b>approved_replies</b>.all %}
    <!-- ... -->
{% endfor %}

Примечание : Я бы посоветовал переименовать ваше поле reply в reply_to, поскольку это выглядит как более согласованная номенклатура.

...