且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

如何处理Hyphen和Django rest ModelSerializer

更新时间:2023-11-13 15:25:28

我发现了可以解决此问题的其他方法.虽然,我仍然不明白为什么我的代码在问题中不起作用.如果您有更好的方法,我仍在寻找:)

I found a work around that might help others with this issue. Though, I still do not understand why my code in the question does not work. If you have a better way, I am still looking :)

-

这个想法是在ViewSet中覆盖在POST上创建的内容,并绕过ModelSerializer.

The idea is to override the creation on POST in the ViewSet and bypass the ModelSerializer.

class MessageViewSet(viewsets.ModelViewSet):
    queryset = Message.objects.all()
    serializer_class = MessageSerializer

    def perform_create(self, serializer):
        msg = Message.objects.create(Subject=self.request.data['Subject'], To=self.request.data['To'], From=self.request.data['From'], Text=self.request.data['stripped-text'])
        msg.save()


class MessageSerializer(serializers.ModelSerializer):
    Text = serializers.CharField(source='body-plain')

    class Meta:
        model = Message
        fields = ['From', 'To', 'Subject', 'Text']
        read_only_fields = ['Text']


class Message(BaseModel):
    From = models.CharField(max_length=500)
    To = models.CharField(max_length=500)
    Subject = models.CharField(max_length=500)
    Text = models.CharField(max_length=10000)
    timestamp = models.DateTimeField(auto_now=True)