#30238: Exception when saving model created with string for DateField
-------------------------------------+-------------------------------------
Reporter: Mitchell | Owner: nobody
Harvey |
Type: Bug | Status: new
Component: Database | Version: 2.1
layer (models, ORM) |
Severity: Normal | Keywords:
Triage Stage: | Has patch: 0
Unreviewed |
Needs documentation: 0 | Needs tests: 0
Patch needs improvement: 0 | Easy pickings: 1
UI/UX: 0 |
-------------------------------------+-------------------------------------
If you instantiate a new model object with a keyword argument value for a
DateField given a string, an exception is thrown when the object is saved.
However, the model is saved anyways.
Example Error:
AttributeError: 'str' object has no attribute 'isoformat'
Call Stack:
{{{
File "REDACTED", line 746, in migrate_remote_unactive_driver
local_driver.save()
File "REDACTED", line 171, in save
super(Driver, self).save(*args, **kwargs)
File "REDACTED/env/lib/python3.6/site-
packages/django/db/models/base.py", line 729, in save
force_update=force_update, update_fields=update_fields)
File "REDACTED/env/lib/python3.6/site-
packages/django/db/models/base.py", line 769, in save_base
update_fields=update_fields, raw=raw, using=using,
File "REDACTED/env/lib/python3.6/site-
packages/django/dispatch/dispatcher.py", line 178, in send
for receiver in self._live_receivers(sender)
File "REDACTED/env/lib/python3.6/site-
packages/django/dispatch/dispatcher.py", line 178, in <listcomp>
for receiver in self._live_receivers(sender)
File "REDACTED", line 12, in create_launch_list
serialized_obj = serializers.serialize('json', [instance])
File "REDACTED/env/lib/python3.6/site-
packages/django/core/serializers/__init__.py", line 128, in serialize
s.serialize(queryset, **options)
File "REDACTED/env/lib/python3.6/site-
packages/django/core/serializers/base.py", line 89, in serialize
self.handle_field(obj, field)
File "REDACTED/env/lib/python3.6/site-
packages/django/core/serializers/python.py", line 51, in handle_field
self._current[field.name] = self._value_from_field(obj, field)
File "REDACTED/env/lib/python3.6/site-
packages/django/core/serializers/python.py", line 47, in _value_from_field
return value if is_protected_type(value) else
field.value_to_string(obj)
File "REDACTED/env/lib/python3.6/site-
packages/django/db/models/fields/__init__.py", line 1281, in
value_to_string
return '' if val is None else val.isoformat()
AttributeError: 'str' object has no attribute 'isoformat'
}}}
django/db/models/fields/__init__.py
value_to_string(self, obj)
Presumes that obj is not of type string already.
To Reproduce:
Create a model with a a field of type 'DateField'
{{{
class MyModel(models.Model):
worthless_field = models.DateField(null=True, blank=True)
}}}
Instantiate and save an object of type 'MyModel' in a view.py:
{{{
my_model_args = { 'worthless_field' : '2019-02-07'}
myExceptionalModel = MyModel( **my_model_args)
# Exception thrown here
myExceptionalModel.save()
# Although, model is actually saved.
}}}
Please check if the value is a valid datetime string already before
attempting to convert it to a string. It would be nice if a model was not
saved when an exception is thrown.
Or do whatever you like, I have to work around it anyways.
Good luck, love Django, great job guys!
--
Ticket URL: <https://code.djangoproject.com/ticket/30238>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.
--
You received this message because you are subscribed to the Google Groups
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/django-updates/057.ae1adb720a460740d334ae4e592d86c3%40djangoproject.com.
For more options, visit https://groups.google.com/d/optout.