2017-02-01 8 views
0

以下のクラスでは、すべての "Ship_Back"オブジェクトに関連するすべてのデータを選択し、最初に "Ring"で、 "Ppack"で2番目のオブジェクトを並べ替えることができます。Django 1.10 order_by()FieldError

ドキュメントが言っていると思うことに基づいてクエリーセットを注文しようとすると、以前のバージョンのDjangoから読んだ他の投稿、私はFieldErrorを取得しています。私は "Ppack"関連のテーブルを並べ替えるだけでそれを単純化しようとしましたが、どちらもうまくいきません。

モデル:

class Ring(models.Model): 
    ring = models.IntegerField() 

class Ppack(models.Model): 
    ppack = models.IntegerField() 
    ring = models.ForeignKey('Ring', on_delete=models.CASCADE) 

class Ship_Back(models.Model): 
    ring_name = models.CharField(max_length = 20) 
    release = models.ForeignKey('Ppack', on_delete=models.CASCADE) 

再生回数:

def index(request): 
    ship_back = Ship_Back.objects.all().order_by('Ppack__ppack') 

これは、次のエラーが得られます。

FieldError at/ Cannot resolve keyword 'Ppack' into field. Choices are: id, release, release_id, ring_name

答えて

2

が代わりに使用します。

order_by('release__ppack') 

関連するモデルの名前ではなく、フィルタにForeignKeyのフィールド名を使用します。あなたが同じモデルに2 ForeignKeyの関係を持っていたと想像してください、あなたはそれらをどのように区別しますか?あなたが記述順序のために、あなたが行うことができますので

、:

order_by('release__ring__ring', 'release__ppack') 
+0

完璧に働いた、ありがとうございました! –

+0

@RobPeterson:答えがあなたを助けたら、アップヴォートして受け入れてください。 – 2ps

+0

@ 2ps - done。私は答えを受け入れる前に10分を要した。 –

関連する問題