Переопределить создание для вложенного сериализатора и выборку объектов модели из упорядоченного dict - PullRequest
0 голосов
/ 26 апреля 2020

Я хочу сделать сообщение для модели NewVariation, используя сериализатор NewVariationSerializer. Я делаю массовое создание с Django REST Framework, как показано здесь .

Моя проблема в том, что мне нужен идентификатор в ContWindowSerializer, чтобы он был доступен для чтения, но я не могу получить к нему доступ в Метод создания родительского сериализатора, использующий - window_id = data['Cont_window']['id']

class ContWindowSerializer(serializers.ModelSerializer):

    """Serializes the Cont Window model."""

    id = HashidSerializerCharField(
        source_field='Conts.ContWindow.id',
        read_only=True,
    )
    Cont = ContSerializer()
    period_dates = DateRangeField()
    start_time = serializers.TimeField(format='%H:%M')
    end_time = serializers.TimeField(format='%H:%M')

    class Meta:
        model = models.ContWindow
        fields = (
            'id', 'Cont', 'period_dates', 'start_time', 'end_time',
        )



class NewVariationSerializer(serializers.ModelSerializer):

    """Serializes the New Variation model."""

    id = HashidSerializerCharField(
        source_field='Conts.NewVariation.id',
        read_only=True,
    )
    Cont_window = ContWindowSerializer()
    reason = serializers.CharField(source='get_reason_display')
    start_datetime = serializers.DateTimeField(format='%Y-%m-%d %H:%M:%S')
    end_datetime = serializers.DateTimeField(format='%Y-%m-%d %H:%M:%S')

    class Meta:
        model = models.NewVariation
        fields = (
            'id', 'capacity', 'reason', 'Cont_window', 'start_datetime',
            'end_datetime',
        )

    def create(self, data):
        """Handle New variation creation."""

        window_id = data['Cont_window']['id']
        Cont_window = models.ContWindow.objects.get(id=window_id)
        data['Cont_window'] = Cont_window
        return super().create(data)

Пожалуйста, дайте мне знать, как это исправить или если есть лучший способ сделать это. Было бы здорово, если бы я мог получить объект ContWindowSerializer в метод create без запроса get.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...