Django - 在 .values() 方法中获取模型对象

Django - get model object in .values() method

提问人:Sandy 提问时间:7/6/2023 最后编辑:Sandy 更新时间:7/6/2023 访问量:25

问:

我有这张表:

卖家名称 销售日期
爱丽丝 2023/05/01
鲍勃 2023/05/03
爱丽丝 2023/05/15
爱丽丝 2023/05/31
卡尔 2023/05/01
卡尔 2023/05/04
鲍勃 2023/05/20
卡尔 2023/05/21

我正在使用这个 Django 查询集来获取每个卖家的第一个和最后一个销售日期:

sales = (Sale.objects.filter(created_at__year=2023, created_at__month=5)
            .values('seller')
            .annotate(min_date=Min('created_at'), max_date=Max('created_at'))
            .order_by()
)

查询工作正常,但它返回的是卖家而不是对象:id<Seller>

{'seller': 1, 'min_date': datetime.datetime(2023, 5, 1, 3, 52, 12, tzinfo=<UTC>), 'max_date': datetime.datetime(2023, 5, 31, 7, 32, 1, tzinfo=<UTC>)}
{'seller': 2, 'min_date': datetime.datetime(2023, 5, 3, 4, 34, 11, tzinfo=<UTC>), 'max_date': datetime.datetime(2023, 5, 20, 5, 52, 1, tzinfo=<UTC>)}
{'seller': 3, 'min_date': datetime.datetime(2023, 5, 1, 11, 50, 5, tzinfo=<UTC>), 'max_date': datetime.datetime(2023, 5, 21, 10, 21, 1, tzinfo=<UTC>)}

如何在queryset中获取模型对象?Seller

更新:这是我文件的相关代码models.py

class Seller(models.Model):
    name = models.CharField(max_length=100, blank=True, default='')

class Sale(models.Model):
    seller = models.ForeignKey(Seller, on_delete=models.CASCADE, null=True, blank=True)
    created_at = models.DateTimeField(auto_now_add=True)
django django-queryset

评论


答:

0赞 Zilay 7/6/2023 #1

您可以使用来获取相关的 Seller 对象。下面是查询的更新版本select_related

sales = (Sale.objects.filter(created_at__year=2023, created_at__month=5)
         .select_related('seller')
         .values('seller')
         .annotate(min_date=Min('created_at'), max_date=Max('created_at'))
         .order_by()
)

评论

0赞 Sandy 7/6/2023
嗨,尝试了您的查询,但它一直只显示卖家 ID。我已经用我的代码更新了我的问题。models.py