Hey,

When we import fixtures and the input data is wrong (ValueError), we get 
something along the following lines. Say the field is supposed to be an int 
and contains instead an empty string as opposed to null/None:
















*ErrorTraceback (most recent call last):  File 
"/run/media..../venv/lib/python3.10/site-packages/django/db/models/fields/__init__.py",
 
line 1787, in to_python    return int(value)ValueError: invalid literal for 
int() with base 10: ''During handling of the above exception, another 
exception occurred:Traceback (most recent call last):  File 
"/run/media/fv/hdd-2/GIT/VOLTEC-WEBAPP/app/venv/lib/python3.10/site-packages/django/core/serializers/python.py",
 
line 142, in Deserializer    data[field.name <http://field.name>] = 
field.to_python(field_value)  File 
"/run/media/fv/hdd-2/GIT/VOLTEC-WEBAPP/app/venv/lib/python3.10/site-packages/django/db/models/fields/__init__.py",
 
line 1789, in to_python    raise 
exceptions.ValidationError(django.core.exceptions.ValidationError: ['“” 
value must be an integer.']During handling of the above exception, another 
exception occurred: (... more similar output...)*

This is raised for instance in 
*venv/lib/python3.10/site-packages/django/core/serializers/python.py 
*line 142 (and similarly in lines above of the same method):




*                try:                    data[field.name 
<http://field.name>] = field.to_python(field_value)                except 
Exception as e:                    raise 
base.DeserializationError.WithData(e, d['model'], d.get('pk'), field_value)*

So we ultimately raise this exception:










*class DeserializationError(Exception):    """Something bad happened during 
deserialization."""    @classmethod    def WithData(cls, original_exc, 
model, fk, field_value):        """        Factory method for creating a 
deserialization error which has a more        explanatory message.        
"""        return cls("%s: (%s:pk=%s) field_value was '%s'" % 
(original_exc, model, fk, field_value))*

At least up to the point where the exception is raised (in 
/serializers/python.py), we know which field exactly caused the error. 
However, in the final error outputs, that information isn't logged 
anywhere. How hard/easy would it be to either:
1 - Pass that info along to the WithData exception so that it can log it 
properly and yield that useful debugging info
2 - create a new custom exception, which would log the fieldname info, in 
case modifying WithData isn't easy/possible (for instance raised in other 
context where fieldname wouldn't be available)?

Thanks,

Franck


-- 
You received this message because you are subscribed to the Google Groups 
"Django developers  (Contributions to Django itself)" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to django-developers+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-developers/ecbbbdb5-6b40-4b0d-ae89-28cd042989ean%40googlegroups.com.

Reply via email to