Skip to main content
 首页 » 编程设计

python之Django:如何从多个模型中按日期获取对象

2025年05月04日47emanlee

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] 

如何以一种有效的方式(即不加载无用数据)做到这一点?

请您参考如下方法:

简单的解决方案 - 我推荐你 - 加载每种类型的 50 个对象,排序,获取前 50 个(加载 3 倍以上)

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

从理论上讲,您还可以使用联合查询和原始查询来施展魔法,但是像这样的所有东西对于复杂的手动处理来说都是肮脏的。