Django:如何从许多模型中按日期获取对象?

时间:2014-12-05 15:12:26

标签: python django sorting

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]

如何以一种有效的方式(即没有加载无用数据)?

1 个答案:

答案 0 :(得分:1)

简易解决方案 - 我建议你 - 加载每种类型的50个对象,排序,先获得50(加载3次以上)

"正确的解决方案"无法使用您当前的架构在ORM中实现。 可能最简单的方法是添加具有日期和通用关系的新模型到整个模型。

从理论上讲,你也可以使用union和raw查询做一些魔术,但是这样的所有东西都是非常简单的手动处理。