【发布时间】:2018-01-04 01:17:02
【问题描述】:
使用 Django Rest Framework 3.6.3,我的模型中有一个选择 CharField:
# models.py
class User(AbstractUser):
GENDER_CHOICES = (
('M', 'Male'),
('F', 'Female'),
)
gender = models.CharField(max_length=1, choices=GENDER_CHOICES)
# viewsets.py
class UserViewSet(viewsets.ModelViewSet):
queryset = User.objects.all()
serializer_class = UserSerializer
我正在发布到端点:
{ 'gender': 'M' }
当我获取端点时,我希望它显示:
{ 'gender': 'Male' }
使用下面的序列化器,它显示选择的显示值(男)而不是值(M),但它不保存:
# serializers.py
class UserSerializer(serializers.ModelSerializer):
# for some reason on save, gender is None??
gender = serializers.SerializerMethodField()
class Meta:
model = User
def get_gender(self, obj):
return obj.get_gender_display()
如果我添加一个to_internal_value 方法那么它工作正常(显示性别选择显示值,但也保存:
# serializers.py
class UserSerializer(serializers.ModelSerializer):
gender = serializers.SerializerMethodField()
class Meta:
model = User
def get_gender(self, obj):
return obj.get_gender_display()
def to_internal_value(self, data):
# if I add a to_internal_value that does nothing, it saves??
return data
为什么会这样?有没有更明显的方法我应该写这个?
【问题讨论】:
标签: python django-rest-framework