#24418: refresh_from_db is breaking on null foreign keys
----------------------------------------------+-----------------------
     Reporter:  ppp23                         |      Owner:  nobody
         Type:  Uncategorized                 |     Status:  new
    Component:  Database layer (models, ORM)  |    Version:  1.8alpha1
     Severity:  Normal                        |   Keywords:
 Triage Stage:  Unreviewed                    |  Has patch:  0
Easy pickings:  0                             |      UI/UX:  0
----------------------------------------------+-----------------------
 If i try to call refresh_from_db on a model instance that has a foreignkey
 set to null, i get an error:

 {{{
 Traceback:
 File "/home/johannes/formonauts/donation/.env/local/lib/python2.7/site-
 packages/django/core/handlers/base.py" in get_response
   112.                     response = wrapped_callback(request,
 *callback_args, **callback_kwargs)
 File "/home/johannes/formonauts/donation/.env/local/lib/python2.7/site-
 packages/django/contrib/admin/options.py" in wrapper
   465.                 return self.admin_site.admin_view(view)(*args,
 **kwargs)
 File "/home/johannes/formonauts/donation/.env/local/lib/python2.7/site-
 packages/django/utils/decorators.py" in _wrapped_view
   99.                     response = view_func(request, *args, **kwargs)
 File "/home/johannes/formonauts/donation/.env/local/lib/python2.7/site-
 packages/django/views/decorators/cache.py" in _wrapped_view_func
   52.         response = view_func(request, *args, **kwargs)
 File "/home/johannes/formonauts/donation/.env/local/lib/python2.7/site-
 packages/django/contrib/admin/sites.py" in inner
   198.             return view(request, *args, **kwargs)
 File "/home/johannes/formonauts/donation/.env/local/lib/python2.7/site-
 packages/django/utils/decorators.py" in _wrapper
   29.             return bound_func(*args, **kwargs)
 File "/home/johannes/formonauts/donation/.env/local/lib/python2.7/site-
 packages/django/utils/decorators.py" in _wrapped_view
   99.                     response = view_func(request, *args, **kwargs)
 File "/home/johannes/formonauts/donation/.env/local/lib/python2.7/site-
 packages/django/utils/decorators.py" in bound_func
   25.                 return func(self, *args2, **kwargs2)
 File "/home/johannes/formonauts/donation/.env/local/lib/python2.7/site-
 packages/django/db/transaction.py" in inner
   371.                 return func(*args, **kwargs)
 File "/home/johannes/formonauts/donation/.env/local/lib/python2.7/site-
 packages/django/contrib/admin/options.py" in add_view
   1164.                 self.save_model(request, new_object, form, False)
 File "/home/johannes/formonauts/donation/server/django-
 donut/donut/admin.py" in save_model
   36.                 obj.save()
 File "/home/johannes/formonauts/donation/server/django-
 donut/nanny/models.py" in save
   109.                 self.refresh_from_db()
 File "/home/johannes/formonauts/donation/server/django-
 donut/donut/basemodels.py" in refresh_from_db
   80.                 related_val = getattr(rel_instance,
 field.related_field.attname)

 Exception Type: AttributeError at /admin/nanny/team/add/
 Exception Value: 'NoneType' object has no attribute 'id'
 }}}

 here rel_instance is assigned:
 
https://github.com/django/django/blob/stable/1.8.x/django/db/models/base.py#L630

 if it is None (foreignkey not set, as it is nullable in this model) the
 getattr function will complain that it can not get 'id' from 'NoneType'

--
Ticket URL: <https://code.djangoproject.com/ticket/24418>
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 django-updates+unsubscr...@googlegroups.com.
To post to this group, send email to django-updates@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-updates/048.20c41f80ab6043cc130e3f3d31d3bc74%40djangoproject.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to