【问题标题】:Django : How to query users based on latest postDjango:如何根据最新帖子查询用户
【发布时间】:2026-02-12 01:15:01
【问题描述】:

问题很简单。我正在建立一个有多个用户的食谱网站来提交他们的食谱。 我想建立一个列出所有用户的页面,并根据他们的最新帖子安排用户层次结构。在 views.py 中查询用户并传递给上下文的最佳方法是什么?

代码sn-p是这样的;

models.py

class UserRecipe(models.Model):
    user = models.ForeignKey(User)
    name = models.CharField(max_length=200)
    created_date = models.DateTimeField(default=timezone.now)

您可以看到 UserRecipe 模型使用 ForeignKey 链接到用户。所以我在views.py中建立一个视图来列出用户并根据他们最后一个UserRecipe created_date的日期对他们进行排名。

所以为了查询用户并根据他们的 UserRecipe created_date 安排他们,最好的方法是什么?

【问题讨论】:

  • 您想列出从最新到最旧的所有食谱吗?还是要根据最近发布食谱的用户列出用户?
  • 我想根据最近发布食谱的用户列出用户
  • @Arekay 在您的过滤器查询中添加order_by('-time_create')
  • @ManojJadhav 如果我想自己订购 UserRecipe 没问题,但现在我想用他们最新的 UserRecipe created_date 订购用户

标签: python django orm


【解决方案1】:

您可以使用以下查询

users = User.objects.order_by("-userrecipe__created_date") 

它将按正确的顺序排列,但是会有重复,即他们创建的每个食谱都会有一个用户条目

如果您使用 postgres 作为数据库,您可以通过在查询末尾添加 .distinct() 来避免这种情况,否则您可以像这样删除重复项:

already_seen = []
for u in users:
    if u not in already_seen:
        already_seen.append(u)

users = already_seen

【讨论】:

  • 谢谢,我仍处于起草模式,所以我仍在使用 sqlite3 进行数据库。 distinct() 不起作用。所以你已经看到的解决方案现在对我来说已经足够了。