捕获 decimal.ConversionSyntax django 导入导出
Catch decimal.ConversionSyntax django import export
我需要能够以更加用户友好的方式显示有关无效小数位和无效外键的错误。
我以为 clean_model_instances = True
会抓住它,但它没有。
无效的十进制错误:
无效外键错误:
我想显示的是错误以及此处的所有其他错误:
提前致谢!
有几种方法可以解决这个问题。
对于 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_model_instances = True
会抓住它,但它没有。
无效的十进制错误:
无效外键错误:
我想显示的是错误以及此处的所有其他错误:
提前致谢!
有几种方法可以解决这个问题。
对于
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