gpt4 book ai didi

django - 如何在 Django Rest Framework 的自定义字段中传递额外的关键字参数?

转载 作者:行者123 更新时间:2023-12-01 02:00:07 25 4
gpt4 key购买 nike

我正在使用 Django Rest Framework 并希望创建一个自定义字段以在我的序列化程序中使用。

class PivotField(serializers.Field):
def __init__(self, *args, **kwargs):
self.key_attr = kwargs.get('key_attr')
self.value_attr = kwargs.get('value_attr')
super(PivotField, self).__init__(*args, **kwargs)

def to_representation(self, value):
data = {}
for model in value.all():
# this is where I'd use the key_attr and value_attr
data[model.type.name] = model.uri
return data

我希望能够像这样向字段传递额外的参数。
resources = PivotField(key_attr='type.name', value_attr='uri')

但是,我不断收到以下错误。

TypeError: init() got an unexpected keyword argument 'key_attr'



有什么方法可以将这些注册为该领域内的有效 kwargs?

最佳答案

通过子类化创建的自定义字段 Field类不接受使用 **kwargs 的额外参数__init__() 中的选项方法。您应该覆盖 __init__() PivotField 中的方法并在实例上设置它们后弹出这些额外的参数。

__init__()的DRF源代码Field 中的方法类(class):

class Field(object):

def __init__(self, read_only=False, write_only=False,
required=None, default=empty, initial=empty, source=None,
label=None, help_text=None, style=None,
error_messages=None, validators=None, allow_null=False):
...

从上面我们可以看到,除了定义的关键字参数之外,没有发送额外参数的选项。

所以,你应该从 kwargs 弹出那些额外的参数。在实例上设置它们时。
class PivotField(serializers.Field):
def __init__(self, *args, **kwargs):
self.key_attr = kwargs.pop('key_attr', None) # pop the custom kwarg
self.value_attr = kwargs.pop('value_attr', None) # pop the custom kwarg
super(PivotField, self).__init__(*args, **kwargs)

关于django - 如何在 Django Rest Framework 的自定义字段中传递额外的关键字参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37326206/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com