Создать сериализатор django для одновременного создания трех экземпляров модели

{
 
        "product_name": "CRVRVgfhghg",
        "product_price": "0.01",
        "product_location": "KIKUYU,KENYA",
        "product_description": "VFVFVFVFVFVF",
        "product_category_name": "livestock",
        "product_farmer_name": "james",
        "product_category_data": {
            "product_category_name": "livestock",
            "product_category_description": "livestock one"
        },
        "product_product_file_data": {
            "product_file_name": "ok"
        }
 }

У меня есть три таблицы: product_category,product and product_product_files... я хочу заполнить все три таблицы одновременно с помощью одного представления и шаблона url... есть ли способ сделать это с помощью сериализаторов?

Я думаю, что вы ищете следующую документацию DRF writable nested serializers.

Посмотрев на это, вы увидите, что они утверждают следующее:

' По умолчанию вложенные сериализаторы доступны только для чтения. Если вы хотите поддерживать операции записи во вложенное поле сериализатора, вам необходимо создать методы create() и/или update(), чтобы явно указать, как должны сохраняться дочерние отношения:'

Вот пример, который они используют:

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

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

data = {
'album_name': 'The Grey Album',
'artist': 'Danger Mouse',
'tracks': [
    {'order': 1, 'title': 'Public Service Announcement', 'duration': 245},
    {'order': 2, 'title': 'What More Can I Say', 'duration': 264},
    {'order': 3, 'title': 'Encore', 'duration': 159},
],

Глядя на ваш фрагмент кода, я бы предположил, что эти модели связаны отношениями один-к-одному. В данном случае many=False, что также является значением по умолчанию. Вы могли бы сделать это для обеих моделей.

Я думаю, что вы сможете добраться до нужного кода с помощью этой информации, если нет, пожалуйста, дайте мне знать.

Вернуться на верх