I thought these rough notes might be useful to anyone migrating from Django 1.4 (and possibly 1.3) to Django 1.11.
Moving from South to Django Migrations
1. Update your settings files:
Remove ‘south’ from your INSTALLED_APPS
2. Remove migrations.
Remove all app/migrations files except for __initi__.py . Remove any *.py[c|o] files.
Make sure there’s no migrations specific code in your app/migrations/__init__.py files
https://docs.djangoproject.com/en/1.7/topics/migrations/
3. Run new Migrations
python manage.py makemigrations; python manage.py migrate;
Moving from Django 1.3/1.4 -> 1.11
This is a 1.3 app migrated to 1.4 and now is being migrated to 1.11.
Will probably need a new manage.py file. Create a dummy project and copy manage.py over your existing manage.py file or diff the two). Rename your settings directory to match the name of your project. In my case the project is portal, settings renamed to portal.
URLS files:
django.conf.urls.defaults is replaced by django.conf.urls
patterns() is gone, see:
https://docs.djangoproject.com/en/1.11/releases/1.8/#django-conf-urls-patterns
Views
django.views.generic.simple
django.views.generic.simple is gone, removed in 1.5.
Replace django.views.generic.simple.direct_to_template with TemplateView:
from django.views.generic import TemplateView
Shortcuts
from django.shortcuts import RequestContext
Replaced with:
from django.template import RequestContext
Contrib
django.contrib.databrowse is gone. See:
Forms
This error:
django.core.exceptions.ImproperlyConfigured: Creating a ModelForm without either the 'fields' attribute or the 'exclude' attribute is prohibited; form BlahForm needs updating.
Change in Django 1.8. See:
Quick fix is:
fields = '__all__'
But you will need to confirm that you want the form to expose all fields.
Formtools
Removal of django.contrib.formtools:
Is now separate package, install with pip:
pip install django-formtools
Change imports from django.contrib.formtools to formtools. For example:
from django.contrib.formtools.preview import FormPreview
Becomes:
from formtools.preview import FormPreview
Models
model._meta.get_all_field_names() is gone.
See:
https://docs.djangoproject.com/en/1.9/ref/models/meta/#migrating-from-the-old-api
This is verbatim from the docs:
MyModel._meta.get_all_field_names()
becomes:
from itertools import chain
list(set(chain.from_iterable(
(field.name, field.attname) if hasattr(field, 'attname') else (field.name,)
for field in MyModel._meta.get_fields()
# For complete backwards compatibility, you may want to exclude
# GenericForeignKey from the results.
if not (field.many_to_one and field.related_model is None)
)))
This provides a 100% backwards compatible replacement, ensuring that both field names and attribute names ForeignKey
s are included, but fields associated with GenericForeignKey
s are not. A simpler version would be:
[f.name for f in MyModel._meta.get_fields()]
While this isn’t 100% backwards compatible, it may be sufficient in many situations.
Commands
BaseCommand
BaseCommand.option_list is gone.
Arguments
See here for how to add arguments:
These custom options can be added in the add_arguments() method like this:
class Command(BaseCommand):
def add_arguments(self, parser):
# Positional arguments
parser.add_argument(‘poll_id’, nargs=‘+’, type=int)
# Named (optional) arguments
parser.add_argument(
‘–delete’,
action=‘store_true’,
dest=‘delete’,
default=False,
help=‘Delete poll instead of closing it’,
)
Move from MySQL to Postgres
Bigger or more complex databases may want to do a manual migration where the database is migration using django models.
https://www.calazan.com/migrating-django-app-from-mysql-to-postgresql/
I’ll update this as I have time.
I am trying to upgrade my django project from 1.5 to 1.11.
I have upgraded all the packages. After that I got django.core.exceptions.ImproperlyConfigured: Application labels aren’t unique, duplicates: error. I fixed it by reading django 1.7 release note. Now I am getting ImportError: cannot import name . I am stuck here. Please help.
You may have a circular import, or your imports are wrong.
Please ask your question on StackoverFlow, and include some code samples.
https://stackoverflow.com/questions/tagged/django
That’s a better place to ask your question as more people will look at it, and you can post code samples which will better help others help you. And post a link to your question!
https://stackoverflow.com/questions/49754271/importerror-cannot-import-model-name
please help me out
please help to resolve this
https://stackoverflow.com/questions/50469798/django-migration-error-while-performing-migration-on-existing-schema