2012-11-09 8 views
7

私のDjangoモデルでは、10個のフィールドがあり、3個のフィールドが外部キーです。 GETリクエストから受け取ったJSONデータでは、すべてのフィールドを取得していますが、外部キーは取得していません。私もこれを行っているが、私はまだJSONデータでそれらのフィールドを取得していない午前Tastypieで外部キー要素をロードするには

:たとえば

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

リソースを定義することなくこれを行う方法はありますか。そうでなければ私はdjnagoの私のすべてのモデルのリソースを作っています。それは時間の無駄ではありません – user825904

+0

追加リソースを作ることがあなたの最善の策になるでしょう。最低限のリソースを作成してAPIから削除し(URLに追加しないでください)、 'full = True'を埋め込むことができます。それほど余分な仕事ではないでしょう。それ以外の場合は、脱水方法が選択肢です。 – Blake

関連する問題