带有ChoiceField的Django Rest框架

我的用户模型中有几个字段是选择字段,并试图找出如何最好地将其实现到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方法使用choice字段的显示值而不是代码,看起来像下面的JSON。

{

'username': 'newtestuser',

'email': 'newuser@email.com',

'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')

以上是 带有ChoiceField的Django Rest框架 的全部内容, 来源链接: utcz.com/qa/426639.html

回到顶部