2017-03-16 22 views
0

顧客の注文カテゴリ別に複数のモデル(テーブル)があります。複数のモデル(テーブル)を使用したDjangoページネーション

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ページネーションを使う方法を教えてもらえますか?

+0

私の回答はあなたに役立ちましたか?受け入れてupvoteしてください。 – ilse2005

答えて

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) 
    ... 
+0

created_atフィールドが(created、created_at、created_on)のような別の名前の場合はどうなりますか? – itsvks

関連する問題