I am working with a proxy model that does not seem to work with the
'unique_together' of the model being proxied.

What I have is:

class Parent(Model):
    id = AutoField(primary_key=True)
    name = CharField()
    stuff = CharField()

    class Meta:
        ordering = ['name']
        unique_together = (('name', 'stuff'),)

class Myproxy(Parent):

    class Meta:
        proxy = True

    def __init__(self, *args, **kwargs):
        super(Myproxy, self).__init__(*args, **kwargs)
        self.stuff = "test"

If I use the Parent model and try to enter, 'myname' and 'test' as the
name/stuff entries twice, I get the usual warning on the second attempt;
the admin telling me that this model entry already exists.

However, if I try the same thing on the Myproxy model (which has a form
without the stuff field; as its meant to be a preset value), I get an:

IntegrityError at /admin/....../add/
(1062, "Duplicate entry 'myname-test' for key 'name'")

The stack trace is as follows:

Traceback:
File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/base.py"
in get_response
  115.                         response = callback(request, *callback_args,
**callback_kwargs)
File
"/usr/local/lib/python2.7/dist-packages/django/contrib/admin/options.py" in
wrapper
  372.                 return self.admin_site.admin_view(view)(*args,
**kwargs)
File "/usr/local/lib/python2.7/dist-packages/django/utils/decorators.py" in
_wrapped_view
  91.                     response = view_func(request, *args, **kwargs)
File
"/usr/local/lib/python2.7/dist-packages/django/views/decorators/cache.py"
in _wrapped_view_func
  89.         response = view_func(request, *args, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/django/contrib/admin/sites.py"
in inner
  202.             return view(request, *args, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/django/utils/decorators.py" in
_wrapper
  25.             return bound_func(*args, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/django/utils/decorators.py" in
_wrapped_view
  91.                     response = view_func(request, *args, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/django/utils/decorators.py" in
bound_func
  21.                 return func(self, *args2, **kwargs2)
File "/usr/local/lib/python2.7/dist-packages/django/db/transaction.py" in
inner
  223.                 return func(*args, **kwargs)
File
"/usr/local/lib/python2.7/dist-packages/django/contrib/admin/options.py" in
add_view
  1007.                 self.save_model(request, new_object, form, False)
File
"/usr/local/lib/python2.7/dist-packages/django/contrib/admin/options.py" in
save_model
  740.         obj.save()
File "/usr/local/lib/python2.7/dist-packages/django/db/models/base.py" in
save
  546.                        force_update=force_update,
update_fields=update_fields)
File "/usr/local/lib/python2.7/dist-packages/django/db/models/base.py" in
save_base
  591.                                update_fields=update_fields)
File "/usr/local/lib/python2.7/dist-packages/django/db/models/base.py" in
save_base
  650.                 result = manager._insert([self], fields=fields,
return_id=update_pk, using=using, raw=raw)
File "/usr/local/lib/python2.7/dist-packages/django/db/models/manager.py"
in _insert
  215.         return insert_query(self.model, objs, fields, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/django/db/models/query.py" in
insert_query
  1675.     return query.get_compiler(using=using).execute_sql(return_id)
File
"/usr/local/lib/python2.7/dist-packages/django/db/models/sql/compiler.py"
in execute_sql
  937.             cursor.execute(sql, params)
File "/usr/local/lib/python2.7/dist-packages/django/db/backends/util.py" in
execute
  41.             return self.cursor.execute(sql, params)
File
"/usr/local/lib/python2.7/dist-packages/django/db/backends/mysql/base.py"
in execute
  122.             six.reraise(utils.IntegrityError,
utils.IntegrityError(*tuple(e.args)), sys.exc_info()[2])
File
"/usr/local/lib/python2.7/dist-packages/django/db/backends/mysql/base.py"
in execute
  120.             return self.cursor.execute(query, args)
File "/usr/lib/python2.7/dist-packages/MySQLdb/cursors.py" in execute
  174.             self.errorhandler(self, exc, value)
File "/usr/lib/python2.7/dist-packages/MySQLdb/connections.py" in
defaulterrorhandler
  36.     raise errorclass, errorvalue


(FTR, I have also tried overriding the model save(), but again get an
IntegrityError, instead of Django performing the expected check).

I am obviously missing some key piece of code, but cannot see what it is.

Thanks
Derek

-- 
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.
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to