Django DRF - 不同的请求和响应序列化
Django DRF - Different Request and Response Serialization
我有一个 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 请求不同(即与模型字段无关)和响应不同(即与模型字段相关)的情况下发回响应?
我解决了上面的问题设置字段为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)
我有一个 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 请求不同(即与模型字段无关)和响应不同(即与模型字段相关)的情况下发回响应?
我解决了上面的问题设置字段为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)