【发布时间】:2021-12-13 22:39:20
【问题描述】:
我需要能够以更加用户友好的方式显示有关无效小数和无效外键的错误。
我以为clean_model_instances = True 会抓住它,但它没有。
无效的十进制错误:
无效的外键错误:
我想要显示的是错误以及此处的所有其他错误:
提前致谢!
【问题讨论】:
标签: django django-import-export
我需要能够以更加用户友好的方式显示有关无效小数和无效外键的错误。
我以为clean_model_instances = True 会抓住它,但它没有。
无效的十进制错误:
无效的外键错误:
我想要显示的是错误以及此处的所有其他错误:
提前致谢!
【问题讨论】:
标签: django django-import-export
有几种方法可以解决这个问题。
对于DecimalWidget,将其声明为CharWidget - 这将处理任何输入字符串,如果您启用了clean_model_instances,则验证模型对象时将引发错误。
对于ForeignKeyWidget,您必须重写clean() 方法,以便它为不存在的引用引发ValueError。 IMO 这并不理想,因为它违反了 clean() 函数的合同。错误消息并不完美,但它确实达到了您想要的效果。
class ValidatingForeignKeyWidget(widgets.ForeignKeyWidget):
def clean(self, value, row=None, *args, **kwargs):
try:
val = super().clean(value)
except self.model.DoesNotExist:
raise ValueError(f"{self.model.__name__} with value={value} does not exist")
return val
class BookResource(ModelResource):
price = fields.Field(attribute='price', widget=widgets.CharWidget())
author = fields.Field(attribute="author", widget=ValidatingForeignKeyWidget(Author))
class Meta:
model = Book
clean_model_instances = True
【讨论】:
clean() 方法会有多糟糕?它会以任何方式影响导入导出库吗?