python - 如何在序列化器中查找元组?
问题描述
我有这样的models.py
GENDER =(
('MALE',1),
('FEMALE',2),
('OTHERS',3)
)
class User(BaseModel, AbstractUser):
type = models.IntegerField(choices=USER_TYPE,null=True)
gender = models.IntegerField(choices=GENDER,null=True)
列出学生的 Views.py 是这样的
def list(self,request):
for adm in StudentAdmission.objects.all():
user = adm.student.user
tmp['user'] = UserGetSerializer(user).data
ud = UserDetail.objects.filter(user_id=user.id)
if ud:
tmp['user_detail'] = UserDetailSerializer(ud.first()).data
像这样的serializer.py ...
class UserBaseSerializer(serializers.Serializer):
first_name = serializers.CharField(max_length=120,required=True)
last_name = serializers.CharField(max_length=120,required=True)
email = serializers.EmailField(required=True)
class UserSerializer(UserBaseSerializer):
gender = serializers.IntegerField()
type = serializers.IntegerField(default=3)
class UserGetSerializer(UserBaseSerializer):
gender = serializers.SerializerMethodField()
type = serializers.IntegerField(default=3)
def get_gender(self, obj):
#Here Confusion
return {'id':obj.gender, 'value':value}
它以性别返回输出 1 而不是返回男性。我想返回 male 而不是 1 。为此,我创建了一个 get_gender() 函数来从元组中查找并返回该对象 ID 的值。所以我的问题是如何编写 get_gender() 函数来查找 Gender 元组。
对不起英语我希望你能理解我的问题
解决方案
使用模型的get_FOO_display
方法:
def get_gender(self, obj):
return obj.get_gender_display()
或者只是指定 is 作为字段的来源:
class UserGetSerializer(UserBaseSerializer):
gender = serializers.CharField(source='get_gender_display')
请注意,您的GENDER
元组具有错误的值。它应该是(actual_value, human_readable)
这样的:
GENDER =(
(1, 'MALE'),
(2, 'FEMALE'),
(3, 'OTHERS')
)
推荐阅读
- algorithm - 递归地将数字 4 的所有分区枚举为四个有序数字?
- java - Java 中的 Azure 函数在本地无法运行
- laravel - Laravel 7 - 随机延迟(主要是 ajax 请求 - 从 300ms 到随机 4,5s)
- ios - 在 ViewWillAppear 和 ViewWillDisappear UI 故障处隐藏/显示导航栏
- php - Laravel/homestead - 没有指定输入文件
- javascript - 将组件道具传递到 ReactJS/NextJS 中的字符串中
- ios - ModelPresentationStyle FullScreen 总是隐藏状态栏
- javascript - *this* 对象在 React 组件中是“未定义的”
- python - 通过sftp成功上传后删除本地机器中的文件
- javascript - React:番茄钟:考虑到状态的异步更新,如何正确更新状态?