我的用户模型中有一些字段是选择字段,我正在尝试找出如何最好地将其实现到 Django Rest Framework 中。
下面是一些简化的代码来展示我正在做的事情。
# models.py
class User(AbstractUser):
GENDER_CHOICES = (
('M', 'Male'),
('F', 'Female'),
)
gender = models.CharField(max_length=1, choices=GENDER_CHOICES)
# serializers.py
class UserSerializer(serializers.ModelSerializer):
gender = serializers.CharField(source='get_gender_display')
class Meta:
model = User
# viewsets.py
class UserViewSet(viewsets.ModelViewSet):
queryset = User.objects.all()
serializer_class = UserSerializer
本质上,我想做的是让 get/post/put 方法使用选择字段的显示值而不是代码,类似于下面的 JSON。
{
'username': 'newtestuser',
'email': '[email protected]',
'first_name': 'first',
'last_name': 'last',
'gender': 'Male'
// instead of 'gender': 'M'
}
我该怎么做呢?上面的代码不起作用。在我有这样的东西用于 GET 之前,但对于 POST/PUT 却给了我错误。我正在寻找有关如何执行此操作的一般建议,这似乎很常见,但我找不到示例。要么是这样,要么我正在做一些非常错误的事情。
Django 提供了Model.get_FOO_display获取字段的“人类可读”值的方法:
class UserSerializer(serializers.ModelSerializer):
gender = serializers.SerializerMethodField()
class Meta:
model = User
def get_gender(self,obj):
return obj.get_gender_display()
对于最新的 DRF (3.6.3) - 最简单的方法是:
gender = serializers.CharField(source='get_gender_display')
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)