我使用DRF的Model Serializer类来(de)序列化我的模型,直到今天开始一个新项目 我总是能够像这样返回一个Choice Field的display name:
let randomIndex = Int(arc4random_uniform(UInt32(alphabetColors.count)))
我的简单示例class StatusSerializer(serializers.ModelSerializer):
status = serializers.ChoiceField(source='get_status_display',
choices=Status.STATUS_CHOICES)
class Meta:
model = Status
fields = ('id', 'status')
模型看起来像
Status
在Django shell中我执行以下操作:
class Status(models.Model):
STATUS_PROCESSING = 0
STATUS_COMPLETE = 1
STATUS_ERROR = 2
STATUS_CHOICES = (
(STATUS_PROCESSING, 'Processing...'),
(STATUS_COMPLETE, 'Processing Complete'),
(STATUS_ERROR, 'Processing Error'))
status = models.IntegerField(choices=STATUS_CHOICES,
default=STATUS_PROCESSING)
我可以看到为什么会发生这种情况(序列化程序不是调用>>> s = Status.objects.create(status=0)
>>> s.get_status_display() # this works
'Processing...'
>>> StatusSerializer(s).data # returns the method itself
{'status': <bound method curry.<locals>._curried of <Status: Status object>>, 'id': 1}
属性而只是引用它),但这曾经在以前工作过!我在Mac OSX Sierra 10.12.1上使用Python 3.5.2运行虚拟环境
source
更新 我将此示例项目降级为以下内容:
Django==1.10.2
djangorestframework==3.5.1
Django==1.10
djangorestframework==3.4.4
的显示名称与预期一致。这里有关于DRF的错误报告:https://github.com/tomchristie/django-rest-framework/issues/4602