2017-02-01 6 views
0

Mit den folgenden Klassen, würde Ich mag alle zugehörigen Daten für alle „Ship_Back“ Objekte können auswählen und sortieren sie durch den „Ring“ ersten und der „PPACK“ Sekunde.Django 1.10 order_by() FieldError

Wenn ich versuche, meine Abfrage basierend auf was ich denke, die Dokumentation zu sagen, und andere Beiträge, die ich aus früheren Versionen von Django gelesen habe, bekomme ich einen FieldError. Ich habe versucht, es zu vereinfachen, um nur auf der "Ppack" bezogenen Tabelle zu sortieren, aber das funktioniert auch nicht.

Modelle:

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) 

Aufrufe:

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

Daraus ergibt sich folgende Fehler:

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

Antwort

2

Verwenden statt:

order_by('release__ppack') 

Sie verwenden den Feldnamen des ForeignKey im Filter, nicht den Namen des zugehörigen Modells. Stellen Sie sich vor, Sie hätten 2 ForeignKey Relationen zum selben Modell, wie würden Sie sie unterscheiden?

Sie Dementsprechend für den Auftrag beschreiben, können Sie tun:

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

Das funktionierte perfekt, danke! –

+0

@RobPeterson: Wenn die Antwort Ihnen geholfen hat, bitte upvote und akzeptieren. – 2ps

+0

@ 2ps - fertig. Ich musste 10 Minuten warten, bevor ich eine Antwort akzeptierte. –