【问题标题】:Grouping posts by day and user in Django在 Django 中按天和用户对帖子进行分组
【发布时间】:2021-03-17 02:54:25
【问题描述】:

我在 Django 中有一个 Post 模型,如下所示:

class Post(models.Model):
post = models.TextField()
user = models.ForeignKey(User, on_delete=models.CASCADE)
timestamp = models.DateTimeField(auto_now=True)

我想对每个用户每天的帖子进行排序和显示。因此,如果一个用户在周一发布了 20 个帖子,另一个用户在周二发布了 15 个帖子,在周三发布了 4 个帖子,那么它们将被组合在一起并显示。我不需要每个用户或每天的帖子总数,只需将用户每天发布的所有帖子分开以将它们一起显示。

示例(希望显示在一页上): 星期一:用户 1:post1、post2、post2。用户 2:post1、post2、post3、post4、post5。星期二:用户 2:post1、post2、post3。 user3: post1, post 2....所有帖子和用户

我试过posts = Post.objects.all().order_by('-timestamp','user') 它会显示所有帖子,但我不知道如何按用户每天对帖子进行分组。

【问题讨论】:

  • 试试这个:posts = Post.objects.all().order_by('-timestamp','user').distinct()

标签: python django date datetime


【解决方案1】:

您应该先按截断日期排序,然后按用户排序,然后再按时间戳排序,以使结果始终相同。没有帖子的排序可能会以不可预知的方式改变它们的顺序。像这样:

posts = Post.objects.all().order_by(TruncDate('timestamp').desc(),'user','timestamp')

【讨论】:

    【解决方案2】:

    我想通了。我需要重新组合嵌套。以下代码有效。我花了两天时间才弄明白。

    {% regroup posts by timestamp|date as date_list %}
    {% for time in date_list %}
        {% regroup time.list by user as user_list %}
            {% for user in user_list %}
            <div class="card" style="width: 30rem;">
                <div class="card-body">
                <div>
                    <img src="{{ user.grouper.profile_pic.url }}" class="rounded-circle mr-3" height="50px" width="50px" alt="avatar" style="float:left">
                    <a href="{% url 'profile' user.grouper.id %}"><h5>@{{user.grouper}}</h5></a>
                </div>
                <p class="card-title">{{ time.grouper}}</p>
                {% for x in user.list %}
                    <li><p class="card-text">{{ x.post}}</p></li>
                {% endfor %}
                </div>
            {% endfor %}
            </div>
    {% endfor %}

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-10-04
      • 1970-01-01
      • 1970-01-01
      • 2015-10-01
      • 2020-09-21
      • 1970-01-01
      • 1970-01-01
      • 2019-09-13
      相关资源
      最近更新 更多