我有两个模型:
全部:
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实例都只与一个特定的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'])
但可以。
更新: 如果我知道如何将“ id”从Lot.objects.annotate传递到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)