Задать вопрос
@adaly89

Django 3.2 + DRF Serializer. Как сделать сериализер с вложенными моделями?

Добрый день!

Есть две модели.
class tbox(models.Model):
        name = models.CharField("Коробка", max_length=15)
        status = models.CharField("Текущий статус коробки", max_length=50)


class tbox_move(models.Model):
        tbox = models.ForeignKey('api.tbox',related_name='tbox_moves', on_delete=models.DO_NOTHING)
        discription = models.TextField(null=True, blank=True)
        def __str__(self):
                return '%d: %s' % (self.order, self.title)


Serializers.py
from rest_framework import serializers
from .models import tbox, tbox_move

class tboxSerializer(serializers.ModelSerializer):
        id = serializers.IntegerField(required=False, write_only=False)
        class Meta:
                model = tbox
                fields = ['id', 'name', 'status']
        def update(self, instance, validated_data):
                print("Updade in serializer TBOX")


class tbox_moveSerializer(serializers.ModelSerializer):
        tbox_moves = tboxSerializer(many=True)
        class Meta:
                model = tbox_move
                fields = ['tbox_moves', 'discription']

        def create(self, validated_data):
                test_data = validated_data.get('tbox_moves')
                tboxs_data = validated_data.pop('tbox_moves')
                for tbox_data in tboxs_data:
                        tbox_id = tbox_data.get("id", None)
                        if tbox_id is None:
                                print("Не указан ID коробки")
                        id_tbox = tbox.objects.filter(id=tbox_id).update(**tbox_data)
                        tbox_m = tbox_move.objects.create(tbox=tbox_id, **validated_data)
                return tbox_m


В общем стерилизаторе необходимо создать запись, а во вложенном обновить.
Но что то как не пробую не получается этого добиться.
  • Вопрос задан
  • 71 просмотр
Подписаться 1 Средний 1 комментарий
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы