Estoy actualizando un antiguo proyecto de Django de Django 1.8.3 al actual Django 1.11, pero para ser cauteloso, estoy actualizando a cada versión importante de Django en el camino, para poder encontrar errores y obsolescencias y solucionarlos antes de tomar la siguiente paso. (No he tocado este código en casi dos años, así que estoy un poco oxidado; perdóname si estoy cometiendo un simple error).
Primero actualicé a Django 1.9.13 (el último antes de 1.10), y cuando administro el servidor de ejecución de manage.py runserver , aparece este error:
/Users/mboszko/.virtualenvs/opticaldev/lib/python2.7/site-packages/django/utils/six.py:808: RemovedInDjango110Warning: SubfieldBase ha quedado obsoleto. Utilice Field.from_db_value en su lugar.
devuelve meta(nombre, bases, d)
Si estoy leyendo este error correctamente, el error proviene de la versión personalizada de six que incorpora Django. He buscado mi código y parece que no estoy usando SubfieldBase en ninguna parte de mi propio código. (También busqué en Google, sin mucho éxito, este error en particular en six ).
¿Es esta solo una situación en la que debo actualizar a Django 1.10, y la nueva versión de six en ese paquete será compatible, o hay algo que debo resolver por mí mismo antes de actualizar?
Ahaaaa. No hay nada como publicar tu pregunta para refrescar un pensamiento que te lleve a la respuesta.
Me di cuenta de que debería profundizar más en el error:
$ python -Werror manage.py runserverCon ese seguimiento de pila, obtengo una línea que muestra:
Archivo "/Users/mboszko/.virtualenvs/opticaldev/lib/python2.7/site-packages/django_date_extensions/fields.py", línea 99, en
class ApproximateDateField(with_metaclass(models.SubfieldBase, models.CharField)):
Entonces, el uso de SubfieldBase en realidad está dentro de un paquete que instalé, django-date-extensions . Esto fue en 1.1.0 en mi virtualenv, y una vez que hice pip install --upgrade django-date-extensions para actualizarlo a 2.0, el error desaparece.
¡Fijado!