1. ホーム
  2. django

[解決済み] Django Rest Frameworkで複数のモデルインスタンスを作成するには?

2023-02-14 13:33:30

質問

Django Rest Framework を使って、1回の API 呼び出しで複数のインスタンスを保存・更新したいです。例えば、複数の先生を持つことができる "Classroom" モデルがあるとします。もし私が複数の教師を作成し、後で彼らの教室の番号をすべて更新したいとしたら、どのようにすればいいでしょうか?私はそれぞれの教師のためにAPIコールを行う必要がありますか?

現在、ネストしたモデルを保存できないことは知っていますが、教師レベルで保存できるかどうかを知りたいです。 ありがとうございます!

どのように解決するのですか?

これは少し前に質問されたものですが、自分で解決しようとしているときに見つけました。

それは、もしあなたが many=True を渡すと、複数のオブジェクトを受け入れることができることがわかります。

これについては ここで django rest framework docs にあります。

私の場合、ビューはこんな感じでした。

class ThingViewSet(viewsets.ModelViewSet):
    """This view provides list, detail, create, retrieve, update
    and destroy actions for Things."""
    model = Thing
    serializer_class = ThingSerializer

シリアライザのインスタンスを直接制御するために、わざわざ定型文を書いて many=True を渡すだけで良いので、シリアライザークラスの中で __init__ をオーバーライドしています。

class ThingSerializer(serializers.ModelSerializer):
    def __init__(self, *args, **kwargs):
        many = kwargs.pop('many', True)
        super(ThingSerializer, self).__init__(many=many, *args, **kwargs)

    class Meta:
        model = Thing
        fields = ('loads', 'of', 'fields', )

このビューのリストURLにデータをフォーマットでポストする。

[
    {'loads':'foo','of':'bar','fields':'buzz'},
    {'loads':'fizz','of':'bazz','fields':'errrrm'}
]

これらの詳細で2つのリソースが作成されました。これはいい感じでした。