#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.

Reply via email to