覆盖嵌套的序列化程序创建并从有序的dict中获取模型对象

问题描述 投票:0回答:1

我想使用NewVariationSerializer序列化程序发布到NewVariation模型。我正在使用Django REST框架进行批量创建,如图here所示。

我的问题是,我需要ContWindowSerializer中的ID为只读,但无法使用-window_id = data['Cont_window']['id']在父级序列化程序的create方法中访问它>

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)

[请让我知道如何解决此问题,或者是否有更好的解决方法。如果我可以在没有get查询的情况下将ContWindowSerializer对象提取到create方法中,那就太好了。

我想使用NewVariationSerializer序列化程序发布到NewVariation模型。我正在使用Django REST Framework进行批量创建,如下所示。我的问题是,我需要在ContWindowSerializer中使用id ...

django django-models django-rest-framework django-views django-serializer
1个回答
0
投票

尝试从initial_data

© www.soinside.com 2019 - 2024. All rights reserved.