Actualización de Django 1.6 a 1.9: Python manage.py migrate failure

Estoy ejecutando Django 1.6.6 en producción y recientemente he actualizado a 1.9.7 en almacenamiento (servidor dev). Esta actualización se realizó en el servidor y seguí los pasos descritos aquí Actualización desde el sur .

Noté que la estructura de los archivos de migración ha cambiado y ya no incluyen una statement de create . Esto causa problemas porque si extraigo este nuevo código de mi repository de GitHub y ejecuto python manage.py makemigrations o python manage.py migrate , dice:

django.db.utils.OperationalError: no such table: appname_modelname

La traza de puntos apunta a mi urls.py porque estoy haciendo referencia al modelo en un queryset:

queryset=list(chain(models.modelname.objects.filter(booleanField=True).order_by(object), models.aDifferentModel.objects.all())),

Antes de la actualización 1.9, syncdb creó las tablas para mí, pero este no es el caso con la migrate . También probé python manage.py migrate --run-syncdb pero esto da el mismo error.

Sin embargo, si copio la base de datos SQLite de mis entornos de producción o de ensayo a mi máquina local y ejecuto el comando, funciona (porque la tabla ya está en la base de datos).

¿Tengo que crear manualmente estas tablas (aunque supongo que no) o estoy haciendo algo mal?

Edición: Se agregaron fragmentos de código y rastreos. Lo siento por no hacer esto inicialmente.

modelos.py

 class HowToApply(models.Model): title = models.CharField(max_length=500, blank=True, null=True) notice = models.TextField(blank=True, null=True) description = models.TextField(blank=True, null=True) active = models.BooleanField(default=None) image = models.FileField(upload_to='numeric/img/%Y', blank=True, null=True) mobile_image = models.FileField(upload_to='mobile/img/%Y', blank=True, null=True) sequence_number = models.IntegerField(unique=True) 

urls.py

 from django.conf.urls import patterns, include, url from django.views.generic import RedirectView, TemplateView, ListView, CreateView from numeric import models, forms, views from honeypot.decorators import check_honeypot from numeric.views import CheckDeviceView from itertools import chain urlpatterns = patterns('', url(r'^academy/howtoapply/$', ListView.as_view( queryset = list(chain(models.HowToApply.objects.filter(active=True).order_by('sequence_number'), models.AcademyAdmin.objects.all())), template_name = 'numeric/apply.html' ), name='apply'), 

rastrear

 Traceback (most recent call last): File "manage.py", line 10, in  execute_from_command_line(sys.argv) File "/var/www/website_mig/venv/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 350, in execute_from_command_line utility.execute() File "/var/www/website_mig/venv/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 342, in execute self.fetch_command(subcommand).run_from_argv(self.argv) File "/var/www/website_mig/venv/local/lib/python2.7/site-packages/django/core/management/base.py", line 348, in run_from_argv self.execute(*args, **cmd_options) File "/var/www/website_mig/venv/local/lib/python2.7/site-packages/django/core/management/base.py", line 398, in execute self.check() File "/var/www/website_mig/venv/local/lib/python2.7/site-packages/django/core/management/base.py", line 426, in check include_deployment_checks=include_deployment_checks, File "/var/www/website_mig/venv/local/lib/python2.7/site-packages/django/core/checks/registry.py", line 75, in run_checks new_errors = check(app_configs=app_configs) File "/var/www/website_mig/venv/local/lib/python2.7/site-packages/django/core/checks/urls.py", line 10, in check_url_config return check_resolver(resolver) File "/var/www/website_mig/venv/local/lib/python2.7/site-packages/django/core/checks/urls.py", line 19, in check_resolver for pattern in resolver.url_patterns: File "/var/www/website_mig/venv/local/lib/python2.7/site-packages/django/utils/functional.py", line 33, in __get__ res = instance.__dict__[self.name] = self.func(instance) File "/var/www/website_mig/venv/local/lib/python2.7/site-packages/django/core/urlresolvers.py", line 417, in url_patterns patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module) File "/var/www/website_mig/venv/local/lib/python2.7/site-packages/django/utils/functional.py", line 33, in __get__ res = instance.__dict__[self.name] = self.func(instance) File "/var/www/website_mig/venv/local/lib/python2.7/site-packages/django/core/urlresolvers.py", line 410, in urlconf_module return import_module(self.urlconf_name) File "/usr/lib/python2.7/importlib/__init__.py", line 37, in import_module __import__(name) File "/var/www/website_mig/project/urls.py", line 14, in  (r'^', include('numeric.urls')), File "/var/www/website_mig/venv/local/lib/python2.7/site-packages/django/conf/urls/__init__.py", line 52, in include urlconf_module = import_module(urlconf_module) File "/usr/lib/python2.7/importlib/__init__.py", line 37, in import_module __import__(name) File "/var/www/website_mig/numeric/urls.py", line 144, in  queryset = list(chain(models.HowToApply.objects.filter(active=True).order_by('sequence_number'), models.AcademyAdmin.objects.all())), File "/var/www/website_mig/venv/local/lib/python2.7/site-packages/django/db/models/query.py", line 258, in __iter__ self._fetch_all() File "/var/www/website_mig/venv/local/lib/python2.7/site-packages/django/db/models/query.py", line 1074, in _fetch_all self._result_cache = list(self.iterator()) File "/var/www/website_mig/venv/local/lib/python2.7/site-packages/django/db/models/query.py", line 52, in __iter__ results = compiler.execute_sql() File "/var/www/website_mig/venv/local/lib/python2.7/site-packages/django/db/models/sql/compiler.py", line 852, in execute_sql cursor.execute(sql, params) File "/var/www/website_mig/venv/local/lib/python2.7/site-packages/django/db/backends/utils.py", line 64, in execute return self.cursor.execute(sql, params) File "/var/www/website_mig/venv/local/lib/python2.7/site-packages/django/db/utils.py", line 95, in __exit__ six.reraise(dj_exc_type, dj_exc_value, traceback) File "/var/www/website_mig/venv/local/lib/python2.7/site-packages/django/db/backends/utils.py", line 64, in execute return self.cursor.execute(sql, params) File "/var/www/website_mig/venv/local/lib/python2.7/site-packages/django/db/backends/sqlite3/base.py", line 323, in execute return Database.Cursor.execute(self, query, params) django.db.utils.OperationalError: no such table: numeric_howtoapply` 

El problema es que su queryset está siendo evaluado cuando se carga urls.py Cuando ejecuta makemigrations para un nuevo proyecto, esto causa el error porque la tabla aún no se ha creado.

Puede solucionar este problema haciendo una subclase de ListView y moviendo el queryset a get_queryset .

 class MyListView(ListView): template_name = 'numeric/apply.html' def get_queryset(self): return list(chain(models.HowToApply.objects.filter(active=True).order_by('sequence_number'), models.AcademyAdmin.objects.all())) 

Luego cambia el patrón de url para usar tu nueva vista.

 url(r'^academy/howtoapply/$', MyListView.as_view(), name='apply', ), 

Django 1.9 ejecuta algunas comprobaciones para validar los patrones de url, lo que significa que los patrones de url se cargan antes de que se makemigrations comando makemigrations . Django 1.8 no tiene estas comprobaciones, por lo que puede configurar el conjunto de consultas como lo ha hecho.