2017-02-16 1 views
0

나는 TransportationOrders 테이블을 가지고 있습니다. 모든 TransportationOrder에는 Route ..가 있으며 모든 Route에는 Places가 있습니다.Django Rest Framework에서 여러 속성으로 정렬

내가 필요로하는 것은 모든 목록이다. 그러나 나는 구경해야하는 첫번째 장소의 이름으로 분류된다.

class TransportationOrder(models.Model): 
    name = models.CharField(max_length=45, unique=True) 
    user = models.ForeignKey('auth.User') 
    description = models.CharField(max_length=300, blank=True, null=True) 
    route = models.ManyToManyField(Place, through='PlaceHasTransportationOrder') 


class PlaceHasTransportationOrder(models.Model): 
    place = models.ForeignKey(Place, on_delete=models.CASCADE) 
    transportation_order = models.ForeignKey(TransportationOrder, related_name="route", on_delete=models.CASCADE) 
    order = models.IntegerField(default=1) #This indicate the order of visits 
    date = models.DateField() 

class Place(models.Model): 
    name = models.CharField(max_length=45) 
    address = models.CharField(max_length=45, null=True, blank=True, default=None) 
    lat = models.FloatField(null=True, blank=True, default=None) 
    lon = models.FloatField(null=True, blank=True, default=None) 

내가 TransportationOrder 모델에 대한 방법을 정의했지만,이 순서는 데이터베이스 수준에서 작동하기 때문에 나는 http:///url?ordering=first_place_name 하려고 갔지이 작동하지 않습니다

내 모델 단순화. 어떤 옵션이 있습니까?

def first_place_name(self): 
    place = Place.objects.all().filter(placehastransportationorder__transportation_order=self, placehastransportationorder__order=1) 
    return place[0].name 

답변

1

Django QuerySets의 order_by 방법을 사용해보십시오. 나는 당신이 원하는 것을 믿습니다.

TransportationOrder.order_by('routes__name').first() 

또는 이와 비슷한 것입니다.

예를 들어, Django 1.10.5를 사용하여 모델을 하나로로드했습니다.

내가 5 객체 생성 : pp2Place 항목입니다을 tTransportationOrder이며, & pt2 ptPlaceHasTransportationOrder 항목입니다.

pt과 연관되고, p2pt2과 관련되었다. TransportationOrder 오브젝트 tptpt2에서 모두 사용되었습니다.

나는 Place의 "Testing"과 "Alphabet"라는 이름으로 두 번째 "알파벳"을 만들었습니다.

t.first().routes.all().values_list('name') <QuerySet [('Testing',), ('Alphabet',)]>

을 내가 위에서 언급 한 귀착 order_by 적용 :

t.order_by('routes__name').values_list('routes__name') <QuerySet [('Alphabet',), ('Testing',)]>

편집을 TransportationOrderroutes 필드에서 단지 기본 쿼리 ID의 순서로 반환 이렇게하면 그것을 만든 :

마지막 문장의 결과는 TransportationOrder 개체를 순서대로 나열합니다 ().이름. 나는 실수로 출력을 좁혀 routes__name 관계 경로 값만 출력했습니다.

+0

매우 유용한 답변이며, 잘못된 설명에 대해 유감입니다. Finnaly가 원하는 것은 내 모든 TransportationOrders를 나열하는 것입니다. 그러나 먼저 방문해야하는 장소의 이름으로 분류됩니다. (나는 더 명확 해 지려고 편집 할 것입니다.) – Marcelo

+0

최종 출력에서 ​​values_list 호출을 제거하면 결과가 나타납니다. 나는 노선 필드를 통해 장소를 인쇄하는 실수를했으나 교통 명령은 원하는 순서대로 진행됩니다. – Neelik

관련 문제