gpt4 book ai didi

带有 ChoiceField 的 Django Rest 框架

转载 作者:行者123 更新时间:2023-11-28 19:33:59 24 4
gpt4 key购买 nike

我的用户模型中有几个字段是选择字段,我正在尝试弄清楚如何最好地将其实现到 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': '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 框架,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28945327/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com