【问题标题】:Django DRF - Different Request and Response SerializationDjango DRF - 不同的请求和响应序列化
【发布时间】:2018-10-10 14:04:23
【问题描述】:

我有一个 API 端点,它请求以下格式的数据:-

{
  "platform": "value",
  "username": "value",
  "login_type": "value"
}

现在,我有一个模型:-

class ModelA(models.Model):
    field1 = models.IntegerField()

请求变量不是模型的一部分,因此我创建了以下序列化程序:-

class ModelASerializer(serializers.ModelSerializer):
    username = serializers.CharField()
    login_type = serializers.IntegerField()
    platform = serializers.ChoiceField(choices=User.PLATFORM_CHOICES)

    def create(self, data):
        platform, username = data.get('platform'), data.get('username')
        login_type = data.get('login_type')
        ###### some processing based on above input
        instance = ModelA.objects.create(field1=11111)
        return instance

    class Meta:
        model = ModelA
        fields = ('username', 'login_type', 'platform')
        read_only_fields = ('field1', )

当我POST数据时,返回的错误是

The serializer field might be named incorrectly and not match any attribute or key on the `ModelA` instance.
Original exception text was: 'ModelA' object has no attribute 'username'.

我知道它会尝试从实例对象get_attr fields。如何发回 INPUT 请求不同(即与模型字段无关)且响应不同(即与模型字段相关)的响应?

【问题讨论】:

  • 在模型OTP 的序列化程序中,您尝试返回模型ModelA 的实例?
  • 抱歉错字。已更正。

标签: python django django-rest-framework django-serializer


【解决方案1】:

我将上述问题设置字段解决为write_only = True。

class ModelASerializer(serializers.ModelSerializer):
    username = serializers.CharField(write_only = True)
    login_type = serializers.IntegerField(write_only = True)
    platform = serializers.ChoiceField(choices=User.PLATFORM_CHOICES, write_only = True)

【讨论】:

    猜你喜欢
    • 2016-08-17
    • 2016-11-05
    • 2019-05-06
    • 1970-01-01
    • 2019-06-11
    • 1970-01-01
    • 2022-10-30
    • 1970-01-01
    • 2011-06-18
    相关资源
    最近更新 更多