具有多个模型(表)的 Django 分页

its*_*vks 2 python django pagination django-models

我们有多个模型(表)用于存储客户的订单类别。

class BookOrder(models.Model):
    user = models.ForeignKey(User)
    order_details = models.CharField(max_length=255)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

class ShoeOrder(models.Model):
    user = models.ForeignKey(User)
    order_details = models.CharField(max_length=255)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

class MobileOrder(models.Model):
    user = models.ForeignKey(User)
    order_details = models.CharField(max_length=255)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)
Run Code Online (Sandbox Code Playgroud)

现在我们需要向我们的客户显示基于 created_at 的订单列表。但它应该是分页的。有人可以建议我如何在多个模型中使用 Django 分页吗?

ils*_*005 5

您可以对查询集执行以下操作chain

from itertools import chain

book_orders = BookOrder.objects.all()
shoe_orders = ShoeOrder.objects.all()    
mobile_orders = MobileOrder.objects.all()
orders = list(
            sorted(
                chain(book_orders, shoe_orders, mobile_orders),
                key=lambda objects: objects.created_at
            ))
paginator = Paginator(orders, 5)
Run Code Online (Sandbox Code Playgroud)

但我认为更好的方法是重构你的模型并使用Multi-Table-Inheritance。然后你有一个基类Order,你可以在这个类上进行分页:

class Order(models.Model):
    user = models.ForeignKey(User)
    order_details = models.CharField(max_length=255)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

class BookOrder(Orders):
    book = models.CharField(max_length=255)
    ...
Run Code Online (Sandbox Code Playgroud)