如何处理Hyphen和Django rest ModelSerializer

我正在尝试实现一个端点,以从mailgun.com API接收电子邮件。基本上,当电子邮件发送到邮件列表时,他们通过POST请求调用端点https://host/messages/

问题在于它们不使用标准REST,并且某些键包含连字符。这是我收到的请求的示例:

{
  'Date': [
    'Fri,26 Apr 2013 11:50:29 -0700'
  ],'From': [
    'Bob <bob@sandbox9cbe4c2829ed44e98c8ebd0c26129004.mailgun.org>'
  ],'Sender': [
    'bob@sandbox9cbe4c2829ed44e98c8ebd0c26129004.mailgun.org'
  ],'Subject': [
    'Re: Sample POST request'
  ],'To': [
    'Alice <alice@sandbox9cbe4c2829ed44e98c8ebd0c26129004.mailgun.org>'
  ],'body-plain': [
    'Hi Alice,\n\nThis is Bob.\n\nI also attached a file.\n\nThanks,\nBob\n\nOn 04/26/2013 11:29 AM,Alice wrote:\n> Hi Bob,\n>\n> This is Alice. How are you doing?\n>\n> Thanks,\n> Alice\n\n'
  ],

我编写了一个序列化文件,并设法获取没有连字符的所有字段,例如FromTo等。但是经过数小时的试验,我无法设法获得body-plain

我尝试过:

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

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

但出现错误{"Text":["This field is required."]}

在我看来,Django rest可能正在修改密钥。有人知道如何处理这个问题吗?

FANCY905269369 回答:如何处理Hyphen和Django rest ModelSerializer

我找到了一种解决方法,可能会帮助其他人解决此问题。虽然,我仍然不明白为什么我的代码在问题中不起作用。如果您有更好的方法,我仍在寻找:)

-

这个想法是在ViewSet中覆盖在POST上创建的内容,并绕过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)
本文链接:https://www.f2er.com/3043677.html

大家都在问