2013-08-09 2 views
3

에 관련 개체와 검색어 세트를 변환 :장고 :의 나는 두 가지 간단한 모델이 있다고 가정하자 JSON

class Place(models.Model): 
    name = models.CharField(max_length=200) 
    address = models.CharField(max_length=200) 

class Event(models.Model): 
    name = models.CharField(max_length=200) 
    date = models.DateField() 
    place = models.ForeignKey(Place) 

내가 지금하고 싶은 것은 해결 된 장소와 이벤트 세트를 조회하고, 목록에 모든 것을 변환입니다 나중에 JSON으로 변환 할 수 있습니다. .values() 이후

Event.objects.all().select_related("place").values() 

이 있지만 작동하지 않습니다 : 나는 ValueQuerySet 내 행운을 시도 지금까지

[{ 
    "name": "event1", 
    "date": "date1", 
    "place": { 
     "name": "place1", 
     "address": "address1", 
    }, 
},{ 
    "name": "event2", 
    "date": "date2", 
    "place": { 
     "name": "place2", 
     "address": "address2", 
    }, 
},] 

.values() 방법 :

이 최종 결과이 같이하는 방법입니다 콘텐츠가 아닌 관련 객체의 ID 만 반환합니다. 그래서 이런 종류의 변환을 수행하는 또 다른 내장 된 방법이 있는지 또는 QuerySet 객체를 반복하고 변환을 수행해야하는지 궁금합니다.

답변

2

이 후 당신 중첩 dicts을 생성 할 기본 방법입니다,하지만 당신은 관련 항목의 값을 선택할 수 있습니다

# No need for select_related in this case 
Event.objects.values('name', 'date', 'place__name', 'place__address') 

[{ 
    "name": "event1", 
    "date": "date1", 
    "place__name": "place1", 
    "place__address": "address1", 
},{ 
    "name": "event2", 
    "date": "date2", 
    "place__name": "place2", 
    "place__address": "address2", 
}] 

절대적으로 필요한 경우, 당신이 파이썬에서 일부 사후 처리를 할 수 있습니다 네가 원하는 중첩 된 dicts를 얻으십시오.

+0

이 기능은 완벽하게 작동합니다. 한 가지 후속 질문 : 이벤트 모델에 다른 모델 인 "광고"와 일대 다 관계가 있다고 가정 해 보겠습니다. 따라서 하나의 이벤트는 관련된 Ad의 여러 인스턴스를 가질 수 있습니다. '.value()'와의 관계를 표현할 수있는 방법이 있는가? 그래서 나는 내 사전에리스트를 남기고 있는가? – basilikum

+0

@basilikum 아니요, values ​​()는 모든 고유 조합에 대해 dict를 작성합니다. 따라서 이벤트에 두 개의 광고 객체가있는 관계가있는 경우 이벤트는 각 Ad 객체와 함께 한 번 두 번 반환됩니다. – knbk

관련 문제