Using Django 1.6.7, in the Admin if I change the name of an object (in this case "substance") with 1:1 relationships and click [Save as new] I get an integrity error[1]. This was working in Django 1.5.x.

Before I put in the effort to roll back to 1.5 for proof I thought I'd check the docs and found this with a "Changed in Django 1.6" note ...

https://docs.djangoproject.com/en/1.6/ref/models/instances/#how-django-knows-to-update-vs-insert

Does anyone have a suggestion?

The interactive traceback indicates my save() method on one of the 1:1 models (in this case "gas") is triggering the problem. See below.

Thanks for any pointers

Mike

- - - - - - - - - - - -

[1] Environment:


Request Method: POST
Request URL: http://localhost:8000/admin/substance/substance/17/

Django Version: 1.6.7
Python Version: 2.7.6
Installed Applications:
(u'django.contrib.auth',
 u'django.contrib.contenttypes',
 u'django.contrib.sessions',
 u'django.contrib.sites',
 u'django.contrib.messages',
 u'django.contrib.admin',
 u'django.contrib.admindocs',
 u'django.contrib.staticfiles',
 u'common',
 u'company',
 u'refer',
 u'substance',
 u'workplace')
Installed Middleware:
(u'django.middleware.cache.UpdateCacheMiddleware',
 u'django.contrib.sessions.middleware.SessionMiddleware',
 u'django.middleware.locale.LocaleMiddleware',
 u'django.middleware.common.CommonMiddleware',
 u'django.middleware.transaction.TransactionMiddleware',
 u'django.middleware.csrf.CsrfViewMiddleware',
 u'django.contrib.auth.middleware.AuthenticationMiddleware',
 u'django.contrib.messages.middleware.MessageMiddleware',
 u'django.middleware.doc.XViewMiddleware',
 u'django.middleware.clickjacking.XFrameOptionsMiddleware',
 u'django.middleware.cache.FetchFromCacheMiddleware')


Traceback:
File "C:\Users\mike\env\xxdx\lib\site-packages\django\core\handlers\base.py" in get_response 112. response = wrapped_callback(request, *callback_args, **callback_kwargs) File "C:\Users\mike\env\xxdx\lib\site-packages\django\contrib\admin\options.py" in wrapper 452. return self.admin_site.admin_view(view)(*args, **kwargs) File "C:\Users\mike\env\xxdx\lib\site-packages\django\utils\decorators.py" in _wrapped_view
  99.                     response = view_func(request, *args, **kwargs)
File "C:\Users\mike\env\xxdx\lib\site-packages\django\views\decorators\cache.py" in _wrapped_view_func
  52.         response = view_func(request, *args, **kwargs)
File "C:\Users\mike\env\xxdx\lib\site-packages\django\contrib\admin\sites.py" in inner
  198.             return view(request, *args, **kwargs)
File "C:\Users\mike\env\xxdx\lib\site-packages\django\utils\decorators.py" in _wrapper
  29.             return bound_func(*args, **kwargs)
File "C:\Users\mike\env\xxdx\lib\site-packages\django\utils\decorators.py" in _wrapped_view
  99.                     response = view_func(request, *args, **kwargs)
File "C:\Users\mike\env\xxdx\lib\site-packages\django\utils\decorators.py" in bound_func
  25.                 return func(self, *args2, **kwargs2)
File "C:\Users\mike\env\xxdx\lib\site-packages\django\db\transaction.py" in inner
  371.                 return func(*args, **kwargs)
File "C:\Users\mike\env\xxdx\lib\site-packages\django\contrib\admin\options.py" in change_view 1224. current_app=self.admin_site.name)) File "C:\Users\mike\env\xxdx\lib\site-packages\django\utils\decorators.py" in _wrapper
  29.             return bound_func(*args, **kwargs)
File "C:\Users\mike\env\xxdx\lib\site-packages\django\utils\decorators.py" in _wrapped_view
  99.                     response = view_func(request, *args, **kwargs)
File "C:\Users\mike\env\xxdx\lib\site-packages\django\utils\decorators.py" in bound_func
  25.                 return func(self, *args2, **kwargs2)
File "C:\Users\mike\env\xxdx\lib\site-packages\django\db\transaction.py" in inner
  371.                 return func(*args, **kwargs)
File "C:\Users\mike\env\xxdx\lib\site-packages\django\contrib\admin\options.py" in add_view
  1152.                 self.save_related(request, form, formsets, False)
File "C:\Users\mike\env\xxdx\lib\site-packages\django\contrib\admin\options.py" in save_related
  904.             self.save_formset(request, form, formset, change=change)
File "C:\Users\mike\env\xxdx\lib\site-packages\django\contrib\admin\options.py" in save_formset
  892.         formset.save()
File "C:\Users\mike\env\xxdx\lib\site-packages\django\forms\models.py" in save 618. return self.save_existing_objects(commit) + self.save_new_objects(commit) File "C:\Users\mike\env\xxdx\lib\site-packages\django\forms\models.py" in save_new_objects 747. self.new_objects.append(self.save_new(form, commit=commit)) File "C:\Users\mike\env\xxdx\lib\site-packages\django\forms\models.py" in save_new
  877.             obj.save()
File "C:\Users\mike\env\xxdx\ssds\substance\models\gas.py" in save
  168.         super(Gas, self).save(*args, **kwargs)

#########################################################
# here is the entire save method containing line 168 above
#
159 def save(self, *args, **kwargs):
160     self.get_oxidizing_comment()
161     if not self.n_equivalency:
162         casno = self.cas()
163         if casno:
164             try:
165                 self.n_equivalency = N_EQUIVALENCY[casno]
166             except KeyError:
167                 pass
168     super(Gas, self).save(*args, **kwargs)
169     if self.ozone:
170         sdsutils.insert_ozone_reg(self)
#
#########################################################

File "C:\Users\mike\env\xxdx\lib\site-packages\django\db\models\base.py" in save 545. force_update=force_update, update_fields=update_fields) File "C:\Users\mike\env\xxdx\lib\site-packages\django\db\models\base.py" in save_base 573. updated = self._save_table(raw, cls, force_insert, force_update, using, update_fields) File "C:\Users\mike\env\xxdx\lib\site-packages\django\db\models\base.py" in _save_table 654. result = self._do_insert(cls._base_manager, using, fields, update_pk, raw) File "C:\Users\mike\env\xxdx\lib\site-packages\django\db\models\base.py" in _do_insert
  687.                                using=using, raw=raw)
File "C:\Users\mike\env\xxdx\lib\site-packages\django\db\models\manager.py" in _insert
  232.         return insert_query(self.model, objs, fields, **kwargs)
File "C:\Users\mike\env\xxdx\lib\site-packages\django\db\models\query.py" in insert_query
  1514.     return query.get_compiler(using=using).execute_sql(return_id)
File "C:\Users\mike\env\xxdx\lib\site-packages\django\db\models\sql\compiler.py" in execute_sql
  903.             cursor.execute(sql, params)
File "C:\Users\mike\env\xxdx\lib\site-packages\django\db\backends\util.py" in execute 69. return super(CursorDebugWrapper, self).execute(sql, params) File "C:\Users\mike\env\xxdx\lib\site-packages\django\db\backends\util.py" in execute
  53.                 return self.cursor.execute(sql, params)
File "C:\Users\mike\env\xxdx\lib\site-packages\django\db\utils.py" in __exit__
  99.                 six.reraise(dj_exc_type, dj_exc_value, traceback)
File "C:\Users\mike\env\xxdx\lib\site-packages\django\db\backends\util.py" in execute
  53.                 return self.cursor.execute(sql, params)

Exception Type: IntegrityError at /admin/substance/substance/17/
Exception Value: duplicate key value violates unique constraint "substance_gas_substance_id_key"
DETAIL:  Key (substance_id)=(22) already exists.


--
You received this message because you are subscribed to the Google Groups "Django 
users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to django-users+unsubscr...@googlegroups.com.
To post to this group, send email to django-users@googlegroups.com.
Visit this group at http://groups.google.com/group/django-users.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-users/543DA667.7030304%40dewhirst.com.au.
For more options, visit https://groups.google.com/d/optout.

Reply via email to