在django_simple_history

时间:2017-08-16 12:26:45

标签: python django prefetch django-simple-history

我有一个模型预订,其中有历史记录。像这样,我使用django_simple_history

class Booking(CreatedAtAbstractBase):
    history = HistoricalRecords()

我使用管理命令来完成任务。我想在预订时预取历史记录

booking_p_history = Booking.history.filter(s_id=6).order_by(
                'updated_at').first()    
booking_obj_list = Booking.objects.select_related(...) \
                    .prefetch_related(
                    Prefetch('booking_history', queryset=booking_p_history, to_attr='driver_pickup_history')
                    ,'booking_history') \
                    .filter(...)

如何在预取中使用简单历史记录?

1 个答案:

答案 0 :(得分:1)

结束答案基本上是“你不能”。这是有道理的。根据我打开的ticket

  

由于history是一个管理器而不是ForeignKey字段,因此objs = MyModel.objects.all()。prefetch_related('history')将不起作用。现在,我们没有任何明确的方法来实现你的功能,我没有立即想到任何东西,因为我不知道django如何实现prefetch_related的细节。

     

但是,您可以直接查询历史表,缓存结果,然后使用评估的查询集进行检查。有关缓存和查询集的更多信息,请查看此处。所以我想你可以保存历史记录并像这样查询:

history_objs = MyModel.history.all()
objs = MyModel.objects.all()

history_for_first_object = filter(lambda x: x.id == objs.first().id, history_objs)