【问题标题】:Django Pagination with multiple models (tables)具有多个模型(表)的 Django 分页
【发布时间】:2017-08-07 12:25:25
【问题描述】:

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

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)

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

【问题讨论】:

  • 我的回答对您有帮助吗?请接受并投票。

标签: python django django-models pagination


【解决方案1】:

你可以对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)

但我认为更好的方法是重构模型并使用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)
    ...

【讨论】:

  • 如果 created_at 字段名称不同,如 (created, created_at, created_on) 会怎样?
猜你喜欢
  • 2019-04-13
  • 2011-03-05
  • 2017-05-31
  • 1970-01-01
  • 1970-01-01
  • 2016-11-06
  • 2015-09-11
  • 1970-01-01
  • 2021-12-07
相关资源
最近更新 更多