3个不同的模型具有不同的日期时间字段:
class ModelA(models.Model):
# some fields here
date = models.DateField()
class ModelB(models.Model):
# some fields here
date = models.DateField()
class ModelC(models.Model):
# some fields here
date = models.DateField()
我想使用日期字段获取最后50个对象(无论他们的类是什么)。 现在,它可以工作,但我正在以非常有效的方式做到这一点,你可以看到:
all_a = ModelA.objects.all()
all_b = ModelB.objects.all()
all_c = ModelC.objects.all()
last_50_events = sorted(
chain(all_a, all_b, all_c),
key=attrgetter('date'),
reverse=True)[:50]
如何以一种有效的方式(即没有加载无用数据)?
答案 0 :(得分:1)
简易解决方案 - 我建议你 - 加载每种类型的50个对象,排序,先获得50(加载3次以上)
"正确的解决方案"无法使用您当前的架构在ORM中实现。 可能最简单的方法是添加具有日期和通用关系的新模型到整个模型。
从理论上讲,你也可以使用union和raw查询做一些魔术,但是这样的所有东西都是非常简单的手动处理。