django 将kwargs从资源传递到小部件

hm2xizp9  于 2023-08-08  发布在  Go
关注(0)|答案(1)|浏览(90)

我一直在使用django import_export,我想把kwargs从资源传递到我的自定义小部件验证器的clean字段。我该怎么做这是我的代码
resources.py

class UserResource(ModelResource):
    identifier = Field(
        column_name="identifier",
        attribute="identifier",
        widget=RegexWidget(),
    )
    class Meta:
        model=User

字符串
widgets.py

class RegexWidget(CharWidget):
   def clean(self, value, row=None, **kwargs):
        regex = kwargs.get("regex", None)
        ...


在测试中,我尝试了以下几点

UserResource.import_data(dataset, regex=r"U\{4}d\Z")


但是小部件的clean方法的kwargs是{}

7ivaypg9

7ivaypg91#

实现这一点的最佳方法是将正则表达式传递给Widget构造函数。

class RegexWidget(CharWidget):
    def __init__(self, regex):
        self.regex = regex
    
    def clean(self, value, row=None, **kwargs):
        regex = self.regex
        # ...
        return super().clean(value, row, **kwargs)

class UserResource(ModelResource):
    identifier = Field(
        column_name="identifier",
        attribute="identifier",
        widget=RegexWidget(r"U\{4}d\Z"),
    )
    class Meta:
        model=User

字符串
文档对此有更多细节。

相关问题