gpt4 book ai didi

python - 根据Django中过滤的列提取最新记录的查询集

转载 作者:行者123 更新时间:2023-11-30 22:35:12 25 4
gpt4 key购买 nike

编辑

我从 stackoverflow 和 django 文档中搜索了我的问题的解决方案,但没有运气。我的模型:

class User(models.Model):
name = models.CharField(max_length=10)
type = models.CharField(max_length=10)

class Userlog(models.Model):
user = models.ForeignKey('User', related_name='userlog')
pc_type = models.CharField(max_length=10)
login_date = models.DateField()

下表是 Django 应用程序中我的 sqlite 表的非常简化的版本:

用户:

+----+------+---------+
| ID | User | Type |
+----+------+---------+
| 1 | A | Admin |
| 2 | B | Admin |
| 3 | C | User |
+----+------+---------+

用户日志:

+----+---------+------------+------------+
| ID | user | pc_type | login_date |
+----+---------+------------+------------+
| 1 | A | Desktop | 2017/01/01 |
| 2 | A | Server | 2017/01/05 |
| 3 | B | Desktop | 2017/01/11 |
| 4 | A | Server | 2017/02/03 |
| 5 | C | Desktop | 2017/02/09 |
| 6 | B | Server | 2017/02/21 |
| 7 | A | Desktop | 2017/03/18 |
| 8 | C | Desktop | 2017/03/31 |
+----+---------+------------+------------+

我尝试了不同的方法:

q = Userlog.objects.values('login_date').annotate(last_date =\
Max('login_date')).filter(pc_type='Desktop', user='Admin', login_date=F('last_date'))

但无法提取筛选列的最新日期。

我需要 Django QuerySet 表达式才能获得以下结果:(使用桌面登录的管理员的最新登录日期)

+----+---------+------------+------------+
| ID | User_ID | pc_type | login_date |
+----+---------+------------+------------+
| 3 | B | Desktop | 2017/01/11 |
| 7 | A | Desktop | 2017/03/18 |
+----+---------+------------+------------+

我发现类似的question ,但我想使用 django 表达式。

最佳答案

In Django documentation您可以阅读有关注释的更多信息。

但就您而言,请尝试:

User.objects\
.filter(type='Admin', user_log__pc_type='Desktop')\
.annotate(last_login_date=Max('user_log__login_date'))
  • 使用 .filter - 您可以过滤所需的记录
  • 使用 .annotate - 您可以获得最长登录日期

要准确运行此代码,您需要为 UserUserLog 之间的关系提供 lated_name='user_log':

class UserLog(models.Model)
user = models.ForeignKey(User, related_name='user_log')
...

关于python - 根据Django中过滤的列提取最新记录的查询集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44648281/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com