Django查询,注释最新的childs值

时间:2017-06-19 13:42:38

标签: django annotate

是否可以注释最后一个孩子的价值?有模型StoreItem,有关系有很多模型运动:

StoreItem.objects.last().movements.last().total_count # => 32

我需要类似的东西:

StoreItem.objects.annotate(total_count_of_last_movement=...??...)

谢谢!

2 个答案:

答案 0 :(得分:2)

鉴于您的上次评论,您不需要汇总。

假设您的模型类似于:

 margin: 0;
 padding: 0;

您只需要向class Movement(models.Model): ... store_item = models.ForeignKey(StoreItem, ..., related_name='movements') total_count = models.IntegerField(...) class StoreItem(models.Model): ... title = models.TextField(...) 模型添加属性:

StoreItem

这样你可以做到:

class StoreItem(models.Model):
    ...
    title = models.TextField(...)

    @property
    def last_movement_total_count(self):
        if self.movements is not None and self.movements.count() > 0:
            return self.movements.last().total_count
        return None # or -1 or something that tells that there are no movements

希望这会有所帮助。

答案 1 :(得分:0)

我不完全理解你的问题,但这是我的建议:

由于您需要设置StoreItem,因此您可以尝试:

last_movement_total_count = StoreItem.objects.last().movements.last().total_count

然后:

store_items_with_count = StoreItem.objects.filter(movement__total_count=last_movement_total_count)

此处,store_items_with_count包含至少有一个StoreItems movement值为total_count的所有last_movement_total_count,然后

store_items_with_count.last() # the last StoreItem

但是,如果你想要最后一次动作的StoreItem,那就更简单了:

last_store_item = Movement.objects.last().store_item

希望这有帮助,如果没有,请指明您的型号以及您最终想要得到什么。