Django-rest-framework: 类型错误:set_context() 缺少 1 个必需的位置参数:“serializer_field”

创建于 2019-06-24  ·  3评论  ·  资料来源: encode/django-rest-framework

清单

  • [ ] 我已验证该问题存在于 Django REST 框架的master分支中。
  • [ ] 我在打开和关闭的工单中搜索了类似的问题,但找不到重复项。
  • [ ] 这不是用法问题。 (那些应该被引导到讨论组。)
  • [ ] 这不能作为第三方库处理。 (我们更喜欢在可能的情况下以第三方库的形式提供新功能。)
  • [ ] 我已将问题简化为最简单的情况。
  • [ ] 我已将失败的测试包含为拉取请求。 (如果您无法这样做,我们仍然可以接受该问题。)

重现步骤

类GraphDomainSerializer(serializers.ModelSerializer):
用户 = serializers.HiddenField(default=serializers.CurrentUserDefault)

预期行为

实际行为

类 CurrentUserDefault(object):
def set_context(self, serializer_field):
self.user = serializer_field.context['request'].user

def __call__(self):
    return self.user

def __repr__(self):
    return unicode_to_repr('%s()' % self.__class__.__name__)

def get_default(self):
"""
如果没有输入,则返回验证数据时使用的默认值
为该字段提供。

    If a default has not been set for this field then this will simply
    raise `SkipField`, indicating that no value should be set in the
    validated data for this field.
    """
    if self.default is empty or getattr(self.root, 'partial', False):
        # No default, or this is a partial update.
        raise SkipField()
    if callable(self.default):
        if hasattr(self.default, 'set_context'):
            **self.default.set_context(self)**
        return self.default()
    return self.default

文件“/Users/lishijin/.pyenv/versions/3.7.2/lib/python3.7/site-packages/rest_framework/fields.py”,第490行,get_default
self.default.set_context(self)
类型错误:set_context() 缺少 1 个必需的位置参数:“serializer_field”
[24/Jun/2019 14:34:45] "POST /graphs/ HTTP/1.1" 500 21130

最有用的评论

默认值应该是一个实例,而不是一个类: serializers.CurrentUserDefault()文档中所示

所有3条评论

默认值应该是一个实例,而不是一个类: serializers.CurrentUserDefault()文档中所示

默认应该是一个实例,而不是一个类: serializers.CurrentUserDefault()文档中所示

它解决了问题

默认值应该是一个实例,而不是一个类: serializers.CurrentUserDefault()文档中所示

谢谢,你帮我解决了这个问题

此页面是否有帮助?
0 / 5 - 0 等级