2017-11-17 5 views
3

私はdjango_tables2を使用してテーブルをレンダリングします。 1つのテーブルでは、最新の5つのエントリのみを表示する必要があります。したがって、私はテーブルオブジェクトに渡す前に、私のクエリセットを注文する必要があります。これは、次のエラーメッセージ生成デフォルトでdjango_tables2テーブルの順序を無効にする

qset = myObject.objects.order_by('-start_time').all()[:5] 
table = MyTableClass(qset, template='path/to/template.html') 

AssertionError: Cannot reorder a query once a slice has been taken. 

を私はすべてのdjango_tables.Columnためorderable=Falseを設定することができますが、MyTableClassが継承しているので別のテーブルクラス、私はこれを避けたいと思います。

ありがとうございます。

答えて

4

から:http://django-tables2.readthedocs.io/en/latest/pages/api-reference.html#table-meta

注文可能(ブール値):列の注文可能な属性のデフォルト値。

テーブルと列に値が指定されていない場合は、列の順序付け可能な値がこれに置き換えられます。これにより、テーブル内の各列にorderable = Falseを追加することなく、テーブル全体の順序付けを無効にする簡単なメカニズムが提供されます。

だからこれは私の問題を解決します

class MyTableClass(django_tables2.Table): 
    class Meta: 
     orderable = False 
    ... 

アップデート:コメントで@Jieterで述べたように 、引数として渡すことも動作するはずです(それをチェックしませんでした):

私は2番目のクエリを回避しdjango_tables2.Tableオブジェクトを(可能であれば)設定することで、それを解決したいと思いますけれども、これは動作します
+1

これはコンストラクタの引数としても使用できることに注意してください。 'table = MyTable(data、orderable = False)'はテーブルの順序付けを無効にします。これは 'class Meta.orderable'属性で設定された値よりも優先されます。 – Jieter

-3

これに変更してください。

qset = myObject.objects.all().order_by('-start_time')[:5] 
+0

いや、。 – ezdazuzena

1

あなたは、最新のエントリを選択するために、__inを使用することができます。

most_recent = list(myObject.objects.order_by('-start_time').all()[:5].values_list('pk', flat=True)) # list is required if databases does not support LIMIT in subqueries 
qset = myObject.objects.filter(id__in=most_recent).order_by('-start_time') 
+0

動作しません

table = MyTable(data, orderable=False) 
ezdazuzena

関連する問題