首页 > 解决方案 > 在 DjangoRestFramework 中,是否期望忽略 MultipleChoiceField 默认属性?

问题描述

我有以下使用 MultipleChoiceField 的请求序列化程序

class CompletedOrderStatusDefault:
    requires_context = False

    def __call__(self, serializer_field):
        # -----> this code is never hit?!
        return [OrderStatus.COMPLETED]

class OrderListRequestSerializer(serializers.Serializer):
...
    order_statuses = serializers.MultipleChoiceField(
        required=False,
        default=CompletedOrderStatusDefault(),
        choices=AllowedOrderStatus.ALLOWED,
    )

调用中的代码在请求期间永远不会被命中,并且该字段的值是一个空集。这是我应该提出的错误,还是我错误地期望此 MultipleChoiceField 使用默认值?如果是这样,当传入请求中未指定参数时,应如何设置默认值?

标签: djangodjango-rest-framework

解决方案


__call__当方法被实现时,类是不可调用的,但它们的实例是可调用的。因此,您应该传入类的实例而不是类本身:

order_statuses = serializers.MultipleChoiceField(
        required=False,
        default=CompletedOrderStatusDefault(),
        choices=AllowedOrderStatus.ALLOWED,
    )

推荐阅读