2012-11-09 5 views
7

내 Django 모델에는 10 개의 필드가 있으며 외래 키인 3 개의 필드가 있습니다. GET 요청에서받은 JSON 데이터에 외래 키가 아닌 모든 필드가 나타납니다.Tastypie에서 외래 키 요소를로드하는 방법

나는 또한 이런 짓을했는지,하지만 난 여전히 그 JSON 데이터의 필드 받고 있지 않다 : 예를 들어

DataFields = MyData._meta.get_all_field_names() 
class MyResource(ModelResource): 
     class Meta: 
     queryset = MyData.objects.all() 
     resource_name = 'Myres' 
     serializer = Serializer(formats=['json']) 
     filtering = dict(zip(DataFields, [ALL_WITH_RELATIONS for f in DataFields])) 

을, 나는 city 같은 모델의 필드가 있지만 필드에서 사용할 수 없습니다 JSON 나는 그것을 얻는다.

JSON에서 city:city__name을 자동으로 얻을 수있는 방법이 있습니까? 내가 이렇게하면

, 나는이 도시를 얻을,하지만 난 정의하지 않고 있음을 수행 할 수 있습니다

def dehydrate(self, bundle): 
     bundle.data["city_name"] = bundle.obj.city__name 
     return bundle 

답변

11

당신은 당신의 외래 키 필드에 대한 related resources를 만들거야, 그리고 그들이 MyResource에 포함. 포함 된 리소스 full=True을 만들면 MyResource을 가져올 때 해당 리소스가 탈수됩니다. 그렇지 않으면 관련 리소스 URI로 퍼가기 시작합니다.

class RelatedResource(ModelResource): 
    class Meta: 
     ... 


class MyResource(ModelResource): 
    related = fields.ForeignKey(RelatedResource, full=True) 

    class Meta: 
     ... 

그런 다음 MyResource에 GET 요청에 ?related__field=value에 의해 필터링 할 수 있습니다.


그냥 모델의 __unicode__에 의해 반환 된 필드를 원하는 경우, 다음 (보다는 관련 자원 내장) 일을 시도 할 수 있습니다 : "도시"필드

class MyResource(ModelResource):  
    city = fields.CharField(attribute="city") 

    class Meta: 
     ... 

입니다 MyData 모델의 외래 키 이름입니다.

+0

리소스를 정의하지 않고이를 수행 할 수있는 방법이 있습니까? Othwise 나는 djnago에서 내 모든 모델의 자원을 만들 수 있습니다. 시간 낭비가 아닙니다. – user825904

+0

추가 리소스를 만드는 것이 최선의 방법입니다. 최소의 리소스를 만들어서 API에서 지우고 (URL에 추가하지 않고) full = True로 포함시킬 수 있습니다. 별로 쓸데없는 일이 아닐세. 그렇지 않으면, 탈수 방법이 대안이다. – Blake