Django DRF 无法反序列化 json

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

我在 django drf 中遇到了一个非常奇怪的问题。下面的视图不会反序列化 post() 方法中的

event_time

class EventListCreateView(generics.ListCreateAPIView):
    class EventSerializer(serializers.ModelSerializer):
        school_id = serializers.IntegerField(read_only=True)
        class_number = serializers.CharField(source='class.universal_number', read_only=True)
        class_id = serializers.IntegerField(write_only=True)

        class Meta:
            model = Event
            fields = ('pk', 'event', 'school_id', 'class_number', 'class_id', 'event_time',)

  
    serializer_class = EventSerializer
    filterset_class = EventFilterSet
    ordering_fields = ['event_time']


    def get_queryset(self):
        return (
            Event.objects.select_related('class')
            .annotate(school_id=F('class__school'))
            .order_by('-pk')
        )

只有在我在序列化器中明确提及

event_time
之后它才起作用:

class EventListCreateView(generics.ListCreateAPIView):
    class EventSerializer(serializers.ModelSerializer):
        school_id = serializers.IntegerField(read_only=True)
        class_number = serializers.CharField(source='class.universal_number', read_only=True)
        class_id = serializers.IntegerField(write_only=True)
        event_time = serializers.DateTimeField()

        class Meta:
            model = Event
            fields = ('pk', 'event', 'school_id', 'class_number', 'class_id', 'event_time',)

  
    serializer_class = EventSerializer
    filterset_class = EventFilterSet
    ordering_fields = ['event_time']


    def get_queryset(self):
        return (
            Event.objects.select_related('event_class')
            .annotate(school_id=F('class__school'))
            .order_by('-pk')
        )

型号:

class Event(models.Model):
    event_class = models.ForeignKey(Class, on_delete=models.DO_NOTHING)
    event = models.CharField(choices=EventNameEnum.choices, max_length=50, db_index=True)
    event_time = models.DateTimeField(editable=False)
    created_at = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return f'Event id: {self.pk} , Device id: {self.event_class.pk}'


这对于正确的方法来说是没有意义的。 任何有关如何解决该问题的建议将不胜感激。

python django serialization django-rest-framework deserialization
1个回答
0
投票

我找到了问题的原因。 它源于模型中

event_time
声明中的 editable=False

event_time = models.DateTimeField(editable=False)

当字段声明为不可编辑时,应在序列化器中显式声明它以包含在反序列化中。

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