Django DRF不同的请求和响应序列化

2024-04-26 05:05:10 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

现在,我有一个模型:

^{pr2}$

请求变量不是模型的一部分,因此我创建以下杀菌剂:在

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。在输入请求不同(即与模型字段无关)和响应不同(即与模型字段相关)的情况下,如何发回响应?在


Tags: instance模型fieldsdatagetvalueontype
1条回答
网友
1楼 · 发布于 2024-04-26 05:05:10

我以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)

相关问题 更多 >

    热门问题