#935 closed defect (duplicate)
weird interaction between edit_inline and OneToOneField causes adding through admin to fail
Reported by: | Owned by: | Adrian Holovaty | |
---|---|---|---|
Component: | contrib.admin | Version: | |
Severity: | normal | Keywords: | |
Cc: | david.ascher@… | Triage Stage: | Unreviewed |
Has patch: | no | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | no | UI/UX: | no |
Description (last modified by )
if I take a model like:
class Account(meta.Model): user = meta.OneToOneField(auth.User, core=True) kid_name = meta.CharField(...)
which extends the User model, and then have:
class Transaction(meta.Model): account = meta.ForeignKey(Account) value = meta.FloatField(max_digits=10,decimal_places=2, default=0) date = meta.DateField(default=datetime.datetime.today()) note = meta.CharField(maxlength=200, default='')
to associate many transactions w/ each account, everything works fine, including the admin pages.
If I add "edit_inline=True, core=True" to the account ForeignKey description, then creating Accounts through the admin interface fails with an error:
AttributeError at /admin/accounts/accounts/add/ 'Account' object has no attribute 'user' Request Method: POST Request URL: http://localhost:8000/admin/accounts/accounts/add/ Exception Type: AttributeError Exception Value: 'Account' object has no attribute 'user' Exception Location: /Users/davidascher/django/django/core/meta/__init__.py in manipulator_save, line 1754
The request object looks like:
<DjangoRequest GET:{}, POST:{'transaction.1.id': [], 'transaction.1.date': 2005-11-27, 'transaction.2.value': 0, '_addanother': Save and add another, 'transaction.0.date': 2005-11-27, 'transaction.2.note': [], 'transaction.1.note': [], 'balance_at_last_transaction': 0, 'last_transaction_date': 2005-11-27, 'transaction.0.value': 0, 'currency': CAD, 'transaction.2.id': [], 'user': 1, 'kid_name': asdas, 'transaction.0.id': [], 'transaction.2.date': 2005-11-27, 'pub_date': 2005-11-27, 'transaction.1.value': 0, 'transaction.0.note': []}, COOKIES:{'hotclub': 'a8625192d1938973fe717071e5202194'}, META:{'CONTENT_LENGTH': '420', 'CONTENT_TYPE': 'application/x-www-form-urlencoded', 'DJANGO_SETTINGS_MODULE': 'bankofdad.settings', 'GATEWAY_INTERFACE': 'CGI/1.1', 'GDK_USE_XFT': '1', 'HOME': '/Users/davidascher', 'HTTP_ACCEPT': 'text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5', 'HTTP_ACCEPT_CHARSET': 'ISO-8859-1,utf-8;q=0.7,*;q=0.7', 'HTTP_ACCEPT_ENCODING': 'gzip,deflate', 'HTTP_ACCEPT_LANGUAGE': 'en-us,en;q=0.5', 'HTTP_CONNECTION': 'keep-alive', 'HTTP_COOKIE': 'hotclub=a8625192d1938973fe717071e5202194', 'HTTP_HOST': 'localhost:8000', 'HTTP_KEEP_ALIVE': '300', 'HTTP_REFERER': 'http://localhost:8000/admin/accounts/accounts/add/', 'HTTP_USER_AGENT': 'Mozilla/5.0 (Macintosh; U; PPC Mac OS X Mach-O; en-US; rv:1.8) Gecko/20051111 Firefox/1.5', 'INFOPATH': '/sw/share/info:/sw/info:/usr/share/info', 'LOGNAME': 'davidascher', 'MANPATH': '/sw/share/man:/opt/local/share/man:/usr/share/man:/usr/X11R6/man', 'OLDPWD': '/Users/davidascher', 'PATH': '/sw/bin:/sw/sbin:/Users/davidascher/bin:/usr/local/bin:/sw/bin:/opt/local/bin:/Users/davidascher/django/django/bin:/bin:/sbin:/usr/bin:/usr/sbin:/usr/X11R6/bin', 'PATH_INFO': '/admin/accounts/accounts/add/', 'PERL5LIB': '/sw/lib/perl5:/sw/lib/perl5/darwin', 'PWD': '/Users/davidascher/svk/trunk/bankofdad', 'PYTHONPATH': '/Users/davidascher/svk/trunk:/Users/davidascher/django', 'QUERY_STRING': , 'REMOTE_ADDR': '127.0.0.1', 'REMOTE_HOST': 'django.loc', 'REQUEST_METHOD': 'POST', 'RUN_MAIN': 'true', 'SCRIPT_NAME': , 'SECURITYSESSIONID': '40f690', 'SERVER_NAME': 'django.loc', 'SERVER_PORT': '8000', 'SERVER_PROTOCOL': 'HTTP/1.1', 'SERVER_SOFTWARE': 'WSGIServer/0.1 Python/2.4.1', 'SGML_CATALOG_FILES': '/sw/etc/sgml/catalog', 'SHELL': '/bin/bash', 'SHLVL': '1', 'TERM': 'vt100', 'TERM_PROGRAM': 'iTerm.app', 'TZ': 'America/Chicago', 'USER': 'davidascher', 'XML_CATALOG_FILES': '/sw/etc/xml/catalog', '_': '/Users/davidascher/django/django/bin/django-admin.py', 'CF_USER_TEXT_ENCODING': '0x1F5:0:0', 'wsgi.errors': <open file '<stderr>', mode 'w' at 0x120b0>, 'wsgi.file_wrapper': <class django.core.servers.basehttp.FileWrapper at 0x2b1120>, 'wsgi.input': <socket._fileobject object at 0x738260>, 'wsgi.multiprocess': False, 'wsgi.multithread': True, 'wsgi.run_once': False, 'wsgi.url_scheme': 'http', 'wsgi.version': (1, 0)}>
Adding the account through the API works just fine:
>>> u = users.get_list()[0] >>> a = Account(user=u, kid_name='foo') >>> a.save()
Puzzledly,
--david
Change History (2)
comment:1 by , 19 years ago
Description: | modified (diff) |
---|
comment:2 by , 18 years ago
Resolution: | → duplicate |
---|---|
Status: | new → closed |
Marking this as a duplicate of #1711, where I believe the situation is explained more clearly and with correctly constructed models.
(Fixed formatting in description)