2017-02-01 8 views
0

С приведенными ниже классами я хотел бы иметь возможность выбирать все связанные данные для всех объектов «Ship_Back» и сортировать их по «Ring» сначала, а «Ppack» - второй.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

@ 2шт - сделано. Я должен был за 10 минут до принятия ответа. –