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



