2011-08-10 9 views
1

で、リストの最後の要素を取得します。私はモデルを持っている:ジャンゴ

class List: 
    data = ... 
    previous = models.ForeignKey('List', related_name='r1') 
    obj = models.ForeignKey('Obj', related_name='nodes') 

これは、OBJのクラスのいくつかのOBJへの参照を含む一方向リストです。私は関係を逆転させ、ことにより、objに参照のうえ、いくつかのリストのすべての要素を取得することができます:

obj.nodes 

しかし、どのように私は非常に最後のノードを取得することはできますか? raw SQLを使用せずに、djangoのSQLクエリをほとんど生成しません。あなたのリストの

+0

raw SQLでは、次のようにsthのようになります。select id、LISTSのデータではないID(SELECTより先にリストを選択)。ここでLISTSは幾分obj.nodes(別の選択)です – santo

答えて

1
len(obj.nodes)-1 

あなたの最後の要素(0から数えて)の指標を与える必要があります

ので

obj.nodes[len(obj.nodes)-1] 

のようなものは、私はリスト の最後の要素を与える必要がありますそれはあなたのケースには良いのか分からない、それを試してみてください:)

+0

TypeError: 'ManyRelatedManager'タイプのオブジェクトにはlen()がありません – rewritten

4

obj.nodesは、関連のない、リストです。任意の管理者と同じように、あなたは

obj.nodes.all().reverse()[0] 

で最後の照会要素を取得することができますこれは、「逆」のそれ以外のセマンティックはなりませんので、ノードのメタクラスで定義された任意のデフォルトの順序がある場合にのみ、とにかく意味がありますどんな意味でも。あなたが指定した任意の順序を持​​っていない場合は、それを明示的に設定します。

obj.nodes.order_by('-pk')[0] 
+0

この回答は古くなったようですが、querysetのlast()メソッドを使用してください。 –

+0

本当に:)それは7年前でした! – rewritten

0

さて、あなただけの[-1]インデックスを使用することができ、それがリストから最後の要素を返します。今クエリセットの最後の()メソッド私はこの質問はかなり古いです参照が、ジャンゴの新しいバージョンで(最初がある

Getting the last element of a list in Python

1

)と:たぶん、この質問はあなたの近くにあります。