Как мне разместить пост на модели django, когда она имеет другую модель (manytomany ) внутри вложенных сериализаторов, я хочу одновременно создать обе модели.

Мои модели:

  1. Period
  2. ClassStudentSubject

Period имеет отношение manytomany с ClassStudentSubject

Когда я размещаю период, я не хочу выбирать, какой существующий объект ClassStudentSubject я использую, я хочу создать новый объект вместе с периодом.

ClassStudentSubject - я создал эту модель ради структурирования некоторых данных периода в объект

Я смог решить свою проблему, ссылаясь на следующее из документации:

https://www.django-rest-framework.org/api-guide/relations/#writable-nested-serializers

Этого можно достичь, переопределив метод create сериализатора. Вы должны сначала создать объект "ClassStudentSubject", а затем использовать этот объект при создании объекта Period в методе "create". Ниже приведен пример из документа, подходящий под ваши требования.

class TrackSerializer(serializers.ModelSerializer):
    class Meta:
        model = Track
        fields = ['order', 'title', 'duration']

class AlbumSerializer(serializers.ModelSerializer):
    tracks = TrackSerializer(many=True)

    class Meta:
        model = Album
        fields = ['album_name', 'artist', 'tracks']

    def create(self, validated_data):
        tracks_data = validated_data.pop('tracks')
        album = Album.objects.create(**validated_data)
        for track_data in tracks_data:
            Track.objects.create(album=album, **track_data)
        return album
Вернуться на верх