Django Serializer返回curried方法而不是get_FOO_display的值

时间:2016-10-27 21:51:10

标签: python django serialization django-rest-framework

我使用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

0 个答案:

没有答案