Как мне разместить пост на модели django, когда она имеет другую модель (manytomany ) внутри вложенных сериализаторов, я хочу одновременно создать обе модели.
Мои модели:
- Period
- 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