我想在序列化器中使用模型中的属性(包括setter),但显然,setter从未被调用。
models.py
class Awesome(models.Model):
_value = models.TextField()
def set_value(self, value):
self._value = value
def get_value(self):
return self._value
value = property(get_value, set_value)
serializers.py
class AwesomeSerializer(serializers.ModelSerializer):
class Meta:
model = Awesome
fields = ('value',)
views.py
class AwesometViewSet(viewsets.ModelViewSet):
queryset = Awesome.objects.all()
serializer_class = AwesomeSerializer
在上面建议的这个场景中,当我进行GET时,getter工作正常,但是当我进行POST时,序列化器不调用setter。
我做错了什么?!
我使用以下版本:
- python == 3.6.1
- Django == 1.11.2
- djangorestframework == 3.6.3
2条答案
按热度按时间tjjdgumg1#
您正在使用
ModelSerializer
,它会根据模型上的字段自动在序列化程序上创建读写字段。当它不是字段(属性或方法)并在Meta.fields
中声明时,它默认为只读字段。在序列化器上显式声明它将使其成为RW字段:
8dtrkrch2#
你可以创建一个自定义的Field类并覆盖函数,而不是在序列化器中使用getter和setter:
to_representation
-代替getterto_internal_value
-代替setter例如: