﻿id	summary	reporter	owner	description	type	status	component	version	severity	resolution	keywords	cc	stage	has_patch	needs_docs	needs_tests	needs_better_patch	easy	ui_ux
8339	Problem with behaviour of ManyToManyField	guneeyoufix	nobody	"I have a problem using the ManyToManyFied with an already existing database. I have two tables called AVAILABILITY and TESTDEF that are linked together according to a n-n relationship. I have defined them as following in my models.py file (with the help of inspectdb). The names of the columns in the tables are the same as the python names.

{{{
class Testdef(models.Model):
    testid = models.DecimalField(max_digits=38, decimal_places=0, primary_key=True)
    testname = models.CharField(max_length=100)
    testtitle = models.CharField(max_length=255, blank=True)
    testabbr = models.CharField(max_length=50, blank=True)
    def __unicode__(self):
        return self.testname+' ('+self.testabbr+')'
    class Meta:
        db_table = u'TESTDEF'

class Availability(models.Model):
    availabilityid = models.AutoField(""Id"", primary_key=True, null=False)
    availabilityname = models.CharField(""Name"", max_length=255)
    bdiiflag = models.CharField(""BDii"", max_length=1, choices=(('Y', ""Yes""),('N', ""No""),))
    void = models.ForeignKey(Vo, db_column='void')
    tests = models.ManyToManyField(Testdef, db_table='AVAILABILITYTESTCRITICALITY', related_name='availabilityid')
    def __unicode__(self):
        return self.availabilityname
    class Meta:
        db_table = u'AVAILABILITY'
        verbose_name_plural = u'Availabilities'
}}}

The linking table is called AVAILABILITYTESTCRITICALITY, and has the following fields: AVAILABILITYID, TESTID

I use this environment:
{{{
Environment:

Request Method: GET
Request URL: http://localhost:8000/admin/avl/availability/6/
Django Version: 1.0-alpha_2-SVN-unknown
Python Version: 2.3.4
Installed Applications:
['django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.sites',
 'django.contrib.admin',
 'django.contrib.databrowse',
 'mysite.avl']
Installed Middleware:
('django.middleware.common.CommonMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.middleware.doc.XViewMiddleware')
}}}

The code as given above, doesn't work, and I get this error when trying to access an AVAILABILITY item from the admin application:
{{{
Traceback:
File ""/usr/lib/python2.3/site-packages/django/core/handlers/base.py"" in get_response
  86.                 response = callback(request, *callback_args, **callback_kwargs)
File ""/usr/lib/python2.3/site-packages/django/contrib/admin/sites.py"" in root
  172.                 return self.model_page(request, *url.split('/', 2))
File ""/usr/lib/python2.3/site-packages/django/views/decorators/cache.py"" in _wrapped_view_func
  44.         response = view_func(request, *args, **kwargs)
File ""/usr/lib/python2.3/site-packages/django/contrib/admin/sites.py"" in model_page
  189.         return admin_obj(request, rest_of_url)
File ""/usr/lib/python2.3/site-packages/django/contrib/admin/options.py"" in __call__
  275.             return self.change_view(request, unquote(url))
File ""/usr/lib/python2.3/site-packages/django/db/transaction.py"" in _commit_on_success
  198.                 res = func(*args, **kw)
File ""/usr/lib/python2.3/site-packages/django/contrib/admin/options.py"" in change_view
  657.             form = ModelForm(instance=obj)
File ""/usr/lib/python2.3/site-packages/django/forms/models.py"" in __init__
  197.             object_data = model_to_dict(instance, opts.fields, opts.exclude)
File ""/usr/lib/python2.3/site-packages/django/forms/models.py"" in model_to_dict
  117.                 data[f.name] = [obj.pk for obj in f.value_from_object(instance)]
File ""/usr/lib/python2.3/site-packages/django/db/models/query.py"" in _result_iter
  176.                 self._fill_cache()
File ""/usr/lib/python2.3/site-packages/django/db/models/query.py"" in _fill_cache
  604.                     self._result_cache.append(self._iter.next())
File ""/usr/lib/python2.3/site-packages/django/db/models/query.py"" in iterator
  266.         for row in self.query.results_iter():
File ""/usr/lib/python2.3/site-packages/django/db/models/sql/query.py"" in results_iter
  200.         for rows in self.execute_sql(MULTI):
File ""/usr/lib/python2.3/site-packages/django/db/models/sql/query.py"" in execute_sql
  1614.         cursor.execute(sql, params)
File ""/usr/lib/python2.3/site-packages/django/db/backends/util.py"" in execute
  19.             return self.cursor.execute(sql, params)
File ""/usr/lib/python2.3/site-packages/django/db/backends/oracle/base.py"" in execute
  343.         return Database.Cursor.execute(self, query, self._param_generator(params))

Exception Type: DatabaseError at /admin/avl/availability/6/
Exception Value: ORA-00904: ""AVAILABILITYTESTCRITICALITY"".""TESTDEF_ID"": invalid identifier
}}}

After renaming the TESTID field in my linking table as TESTDEF_ID, I get this other error, as if django had completely forgotten about the primary keys I have defined before (it seems that the field it tries to access is the default name of the primary key).

{{{
Traceback:
File ""/usr/lib/python2.3/site-packages/django/core/handlers/base.py"" in get_response
  86.                 response = callback(request, *callback_args, **callback_kwargs)
File ""/usr/lib/python2.3/site-packages/django/contrib/admin/sites.py"" in root
  172.                 return self.model_page(request, *url.split('/', 2))
File ""/usr/lib/python2.3/site-packages/django/views/decorators/cache.py"" in _wrapped_view_func
  44.         response = view_func(request, *args, **kwargs)
File ""/usr/lib/python2.3/site-packages/django/contrib/admin/sites.py"" in model_page
  189.         return admin_obj(request, rest_of_url)
File ""/usr/lib/python2.3/site-packages/django/contrib/admin/options.py"" in __call__
  275.             return self.change_view(request, unquote(url))
File ""/usr/lib/python2.3/site-packages/django/db/transaction.py"" in _commit_on_success
  198.                 res = func(*args, **kw)
File ""/usr/lib/python2.3/site-packages/django/contrib/admin/options.py"" in change_view
  657.             form = ModelForm(instance=obj)
File ""/usr/lib/python2.3/site-packages/django/forms/models.py"" in __init__
  197.             object_data = model_to_dict(instance, opts.fields, opts.exclude)
File ""/usr/lib/python2.3/site-packages/django/forms/models.py"" in model_to_dict
  117.                 data[f.name] = [obj.pk for obj in f.value_from_object(instance)]
File ""/usr/lib/python2.3/site-packages/django/db/models/query.py"" in _result_iter
  176.                 self._fill_cache()
File ""/usr/lib/python2.3/site-packages/django/db/models/query.py"" in _fill_cache
  604.                     self._result_cache.append(self._iter.next())
File ""/usr/lib/python2.3/site-packages/django/db/models/query.py"" in iterator
  266.         for row in self.query.results_iter():
File ""/usr/lib/python2.3/site-packages/django/db/models/sql/query.py"" in results_iter
  200.         for rows in self.execute_sql(MULTI):
File ""/usr/lib/python2.3/site-packages/django/db/models/sql/query.py"" in execute_sql
  1614.         cursor.execute(sql, params)
File ""/usr/lib/python2.3/site-packages/django/db/backends/util.py"" in execute
  19.             return self.cursor.execute(sql, params)
File ""/usr/lib/python2.3/site-packages/django/db/backends/oracle/base.py"" in execute
  343.         return Database.Cursor.execute(self, query, self._param_generator(params))

Exception Type: DatabaseError at /admin/avl/availability/6/
Exception Value: ORA-00904: ""AVAILABILITYTESTCRITICALITY"".""TESTDEF_ID"": invalid identifier
}}}

Is it just me (maybe I have missed an option in the definition of the ManyToManyField), or is it a real bug?"		closed	contrib.admin	dev		invalid			Unreviewed	0	0	0	0	0	0
