繁体   English   中英

当我在不基于 Model 的序列化程序中将 Charfield 中的选项放入时出错 - Django Rest 框架

[英]Error when I put choices in Charfield in a Serializer which is not based on Model - Django Rest Framework

我制作了一个序列化程序,它不是基于 model,其中一个字段是一个字符字段,我想在其中放置特定的选择。 那可能吗?

我在输入代码时遇到的错误:

TypeError: init () 得到了一个意外的关键字参数 'choices'

STATUS_TYPES = (
    ('', ''),
    ('male', 'male'),
    ('female', 'female')
)

class SomeSerializer(serializers.Serializer):
    gender = serializers.CharField(max_length=100, choices=GENDER_TYPES)

要在 Django Rest 框架中使用选择字段,请使用: ChoiceFieldMultipleChoiceField而不是 Charfield(..., choices=(...))

在你的情况下:

class SomeSerializer(serializers.Serializer):
    gender = serializers.ChoiceField(choices=GENDER_TYPES)

使用SerializerMethodField可以解决此问题。 我假设GENDER_TYPES元组中的第一个元素是源,第二个元素是你想要的。

GENDER_TYPES = (
    ('', ''),
    ('male', 'male'),
    ('female', 'female')
)

class SomeSerializer(serializers.Serializer):
    gender = serializers.SerializerMethodField()
    
    def get_gender(self, obj):
        return next(filter(lambda gt: gt[0] == obj['gender'], GENDER_TYPES))[1]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM