我试图在Django中创建一个enum field,在GET请求时将返回枚举的文本表示形式,在POST或PATCH请求时,它将在保存之前将文本表示转换为相应的整数。在
在
transform_<field>()
方法可以很好地将整数枚举值转换为其对应的字符串,但除了破解
^{pr2}$方法。在
有更好的方法吗?请参阅下面的代码
模型文件
class Status(enum.Enum):
RUNNING = 0
COMPLETED = 1
labels = {
RUNNING: 'Running',
COMPLETED: 'Completed'
}
translation = {v: k for k, v in labels.iteritems()}
class Job(models.Model):
status = enum.EnumField(Status)
序列化程序
class JobSeralizer(serializers.ModelSerailzer):
status = seralizers.CharField(max_length=32, default=Status.QUEUED)
def transform_status(self, obj, value):
return JobStatus.labels[value]
def validate_status(self, attrs, source):
"""Allow status to take numeric or character representation of status
"""
status = attrs[source]
if status in JobStatus.translation:
attrs[source] = JobStatus.translation[status]
elif status.isdigit():
attrs[source] = int(status)
else:
raise serializers.ValidationError("'%s' not a valid status" % status)
return attrs
正如OP所述,您可以使用drfv3.x中的custom fields轻松完成此操作。下面是一个用于转换值<;->;标签的通用自定义字段的快速示例(例如,枚举值<;->;文本表示):
字段初始化如下所示:
^{2}$相关问题 更多 >
编程相关推荐