How to add a new field to a model with new Django migrations?

To answer your question, with the new migration introduced in Django 1.7, in order to add a new field to a model you can simply add that field to your model and initialize migrations with ./manage.py makemigrations and then run ./manage.py migrate and the new field will be added to your DB.

To avoid dealing with errors for your existing models however, you can use the --fake:

  1. Initialize migrations for your existing models:

    ./manage.py makemigrations myapp
    
  2. Fake migrations for existing models:

    ./manage.py migrate --fake myapp
    
  3. Add the new field to myapp.models:

    from django.db import models
    
    class MyModel(models.Model):
        ... #existing fields
        newfield = models.CharField(max_length=100) #new field
    
  4. Run makemigrations again (this will add a new migration file in migrations folder that add the newfield to db):

    ./manage.py makemigrations myapp
    
  5. Run migrate again:

    ./manage.py migrate myapp
    

Leave a Comment

Hata!: SQLSTATE[HY000] [1045] Access denied for user 'divattrend_liink'@'localhost' (using password: YES)