#21438: Djando migrations do not track many to many fields
----------------------------+-----------------------------------
Reporter: zaharid@… | Owner:
Type: Bug | Status: new
Component: Migrations | Version: master
Severity: Normal | Keywords: manytomany foreignkey
Triage Stage: Unreviewed | Has patch: 0
Easy pickings: 0 | UI/UX: 0
----------------------------+-----------------------------------
When I add a manytomany field to an existing model, and then do a
migration, the corresponding table does not get created. Sample error:
{{{
---------------------------------------------------------------------------
OperationalError Traceback (most recent call
last)
<ipython-input-6-6970514bfc33> in <module>()
----> 1 c.save()
/usr/local/lib/python2.7/dist-packages/django/db/models/base.pyc in
save(self, force_insert, force_update, using, update_fields)
579
580 self.save_base(using=using, force_insert=force_insert,
--> 581 force_update=force_update,
update_fields=update_fields)
582 save.alters_data = True
583
/usr/local/lib/python2.7/dist-packages/django/db/models/base.pyc in
save_base(self, raw, force_insert, force_update, using, update_fields)
616 if not meta.auto_created:
617 signals.post_save.send(sender=origin, instance=self,
created=(not updated),
--> 618 update_fields=update_fields,
raw=raw, using=using)
619
620 save_base.alters_data = True
/usr/local/lib/python2.7/dist-packages/django/dispatch/dispatcher.pyc in
send(self, sender, **named)
183
184 for receiver in self._live_receivers(sender):
--> 185 response = receiver(signal=self, sender=sender,
**named)
186 responses.append((receiver, response))
187 return responses
/home/zah/project/instruments/utils.pyc in wrapper(sender, **kwargs)
20 @wraps(func)
21 def wrapper(sender, **kwargs):
---> 22 return func(kwargs.get('instance'))
23 signal.connect(wrapper, sender=cls)
24 return wrapper
/home/zah/project/instruments/models.py in post_save(self)
33 self.parameters.add(param)
34 def post_save(self):
---> 35 self.get_params()
36 def __unicode__(self):
37 return self.name
/home/zah/project/instruments/models.py in get_params(self)
31 param = Parameter(name = param_name)
32 param.save()
---> 33 self.parameters.add(param)
34 def post_save(self):
35 self.get_params()
/usr/local/lib/python2.7/dist-packages/django/db/models/fields/related.pyc
in add(self, *objs)
607 if rel.through._meta.auto_created:
608 def add(self, *objs):
--> 609 self._add_items(self.source_field_name,
self.target_field_name, *objs)
610
611 # If this is a symmetrical m2m relation to self,
add the mirror entry in the m2m table
/usr/local/lib/python2.7/dist-packages/django/db/models/fields/related.pyc
in _add_items(self, source_field_name, target_field_name, *objs)
683 '%s__in' % target_field_name: new_ids,
684 })
--> 685 new_ids = new_ids - set(vals)
686
687 if self.reverse or source_field_name ==
self.source_field_name:
/usr/local/lib/python2.7/dist-packages/django/db/models/query.pyc in
__iter__(self)
138 - Responsible for turning the rows into model
objects.
139 """
--> 140 self._fetch_all()
141 return iter(self._result_cache)
142
/usr/local/lib/python2.7/dist-packages/django/db/models/query.pyc in
_fetch_all(self)
960 def _fetch_all(self):
961 if self._result_cache is None:
--> 962 self._result_cache = list(self.iterator())
963 if self._prefetch_related_lookups and not
self._prefetch_done:
964 self._prefetch_related_objects()
/usr/local/lib/python2.7/dist-packages/django/db/models/query.pyc in
iterator(self)
1182 def iterator(self):
1183 if self.flat and len(self._fields) == 1:
-> 1184 for row in
self.query.get_compiler(self.db).results_iter():
1185 yield row[0]
1186 elif not self.query.extra_select and not
self.query.aggregate_select:
/usr/local/lib/python2.7/dist-packages/django/db/models/sql/compiler.pyc
in results_iter(self)
672 fields = None
673 has_aggregate_select = bool(self.query.aggregate_select)
--> 674 for rows in self.execute_sql(MULTI):
675 for row in rows:
676 if has_aggregate_select:
/usr/local/lib/python2.7/dist-packages/django/db/models/sql/compiler.pyc
in execute_sql(self, result_type)
753
754 cursor = self.connection.cursor()
--> 755 cursor.execute(sql, params)
756
757 if not result_type:
/usr/local/lib/python2.7/dist-packages/django/db/backends/utils.pyc in
execute(self, sql, params)
75 start = time()
76 try:
---> 77 return super(CursorDebugWrapper, self).execute(sql,
params)
78 finally:
79 stop = time()
/usr/local/lib/python2.7/dist-packages/django/db/backends/utils.pyc in
execute(self, sql, params)
59 return self.cursor.execute(sql)
60 else:
---> 61 return self.cursor.execute(sql, params)
62
63 def executemany(self, sql, param_list):
/usr/local/lib/python2.7/dist-packages/django/db/utils.pyc in
__exit__(self, exc_type, exc_value, traceback)
91 if dj_exc_type not in (DataError, IntegrityError):
92 self.wrapper.errors_occurred = True
---> 93 six.reraise(dj_exc_type, dj_exc_value, traceback)
94
95 def __call__(self, func):
/usr/local/lib/python2.7/dist-packages/django/db/backends/utils.pyc in
execute(self, sql, params)
59 return self.cursor.execute(sql)
60 else:
---> 61 return self.cursor.execute(sql, params)
62
63 def executemany(self, sql, param_list):
/usr/local/lib/python2.7/dist-packages/django/db/backends/sqlite3/base.pyc
in execute(self, query, params)
487 return Database.Cursor.execute(self, query)
488 query = self.convert_query(query)
--> 489 return Database.Cursor.execute(self, query, params)
490
491 def executemany(self, query, param_list):
}}}
--
Ticket URL: <https://code.djangoproject.com/ticket/21438>
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 [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/django-updates/060.d910de7a01be7a06ae525fde0f251e97%40djangoproject.com.
For more options, visit https://groups.google.com/groups/opt_out.