7

オブジェクトをjsonデータとして返すAPIを作成しました。私はdjango-rest-frameworkとそのシリアライザーを使用しています。リソース (ModelResource) を使用して、「所有者」と呼ばれるプロパティなど、いくつかのフィールドを除外しました。フィールドの 1 つは、それ自体に対する外部キーです。このフィールドを API で表示したい (したがって、depth=2 を使用します) が、返されるオブジェクトで除外したのと同じフィールドを除外したいと考えています。これを行う良い方法はありますか (私はいくつかのことを試しましたが、望ましい結果は得られませんでした)。

これは私の(簡略化された)コードです:models.py内:

class MyObject(models.Model):
    name = models.CharField(max_length=256, blank=True)
    parent = models.ForeignKey('self',  blank=True,  null=True, default=None)
    and_some_otherfields = models.otherFields(....)
    owner = models.ForeignKey(User, null=True, blank=True, related_name='myobject_owner')

resource.py で:

class MyObjectResource(ModelResource):
    model = MyObject
    exclude = ('owner','and some other fields',)

オブジェクトを返すために使用されるビューでは、次のように返されます。

    data = Serializer(depth=2).serialize(my_object)
    return Response(status.HTTP_200_OK, data)

応答では、除外フィールドが省略されています(私が望んでいたように)。

しかし、フィールドparentでは、非表示にしたいすべてのフィールドを持つ親myobjectです。

この親オブジェクトに対して、シリアライザーが同じリソースを使用するか、二次フィールドを除外リストに追加する必要があることを示す方法を探しています....

depth =1 を使用すると、親 ([]) があるかどうかのみが表示され、ない場合は null が表示され、少なくとも親の ID を知る必要があります。

4

2 に答える 2

3

ああ、私はそれを見つけました:

どのリソースを表示したいすべてのフィールドのリソースを追加する必要があります....

fields = ('name', ("parent","MyObjectResource") , 'および表示したい他のすべてのフィールド...')

ここで見つけました:Googleグループフォーラムの質問

除外をスキップして無視し、表示するフィールドを追加するだけで、使用するリソースを指定する必要がない限り、それらを定義する必要はありません。

以下は、resource.py 部分の最終的なコードです。

class MyObjectResource(ModelResource):
    model = MyObject
    fields = ('name', ("parent","MyObjectResource"), 'and all the other fields you want to see as well...')
于 2012-09-04T11:07:10.430 に答える
1

他の解決策は次のとおりです。

class ProToPicturesSerial(serializers.ModelSerializer):
    pro_pictures = PictureSerializer(many=True)
    pro_videos = VideoSerializer(many=True)
    city_pro = CitySerializer(many=True)

    class Meta:
        model = Province
        fields = ('id', 'name', 'intro', 'description', 'display_url', 'pro_pictures', 'pro_videos', 'city_pro')
于 2014-04-10T10:02:08.207 に答える