首页 > 解决方案 > 如何将相关模型中的字段注释到查询集?

问题描述

我有两个模型:

很多:

class Lot(models.Model):
    name = models.CharField(max_length=150, db_index=True, unique=True)
    step = models.DecimalField(max_digits=2, decimal_places=2)

和投标:

class Bid(models.Model):
    auction = models.ForeignKey('Lot', on_delete=models.CASCADE)
    user_id = models.ForeignKey(User, on_delete=models.CASCADE, to_field='username')
    value = models.DecimalField(max_digits=5, decimal_places=2)

每个 Lot 实例都可以有几个 Bid,但是任何 Bid 实例仅与特定 Lot 相关。

我有一个 Lot 的工作注释,它给了我 max_bid 和 next_bid 值:

self.auc_set = Lot.objects.annotate(max_bid=Max('bid__value'), next_bid=(Max('bid__value') + F('step')))

而我无法实现的是获得 3 个带注释的字段:max_bid、next_bid 和 last_bidder。

就像是:

self.auc_set = Lot.objects.annotate(max_bid=Max('bid__value'), next_bid=(Max('bid__value') + F('step')), last_bidder=F(bid_set).get('auction_id'= F('id'), 'value'=max_bid)['user_id'])

但工作。

更新:如果我知道如何将 Lot.objects.annotate 中的“id”传递给 Bid.objects.get 部分,问题将得到解决:

auc_set = Lot.objects.annotate(last_bidder=Bid.objects.get(auction_id__exact='need_to_put_something_here', value=Max('value').user_id)

标签: djangomodelannotate

解决方案


推荐阅读