0

サーバー部分を構築するために Django Rest フレームワークを使用しています。私は次のモデルを持っています:

class B:
    name_b = models.CharField(max_length=200)
class D:
    name_d = models.CharField(max_length=200)
class C:
    B_fk = models.ForeignKey(B, related_name='B_id')
    D_fk = models.ForeignKey(D, related_name='D_id')

そして、ネストされたリレーションシップを使用する私のシリアライザーは次のとおりです ( here ):

class C_Serializer(serializers.ModelSerializer):
    class Meta:
        model = C
        fields = ('D_id',)
class B_Serializer(serializers.ModelSerializer):
    B_fk = C_Serializer(many=True)
    class Meta:
        model = B
        fields = ('name_b','B_id',)

そして私の見解:

class MyView(generics.ListCreateAPIView):
    permission_classes = (permissions.IsAuthenticated,)
    queryset = B.objects.all()
    serializer_class = B_Serializer

最後に次のような JSON があります。

[{"name_b": "NAME B", "B_id": [{"D_id": 130},{"D_id": 135},{"D_id": 145},{"D_id": 154}]}]

しかし、私はしたいです

[{"name_b": "NAME B", "B_id":[130, 135, 145, 154]}]

出来ますか?私たちを手伝ってくれますか?

前もって感謝します!

4

1 に答える 1

0

その場合、ネストされたシリアライザーは必要ありません。デフォルトのリレーションはPrimaryKeyRelatedFieldを使用しています。

class B_Serializer(serializers.ModelSerializer):
    B_id = PrimaryKeyRelatedField(many=True, source=B_id)
    class Meta:
        model = B
        fields = ('name_b','B_id',)

C インスタンスにアクセスするには .B_id が必要になるため、モデルの related_name が間違っているように見えることに注意してください。

于 2015-11-07T06:47:53.133 に答える