I'm using the contribute_to_class
method but I don't know how to create the field in the database with new migrations.
Use update_fields in save() If you would like to explicitly mention only those columns that you want to be updated, you can do so using the update_fields parameter while calling the save() method. You can also choose to update multiple columns by passing more field names in the update_fields list.
makemigrations is responsible for packaging up your model changes into individual migration files - analogous to commits - and migrate is responsible for applying those to your database.
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
:
Initialize migrations for your existing models:
./manage.py makemigrations myapp
Fake migrations for existing models:
./manage.py migrate --fake myapp
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
Run makemigrations again (this will add a new migration file in migrations folder that add the newfield to db):
./manage.py makemigrations myapp
Run migrate again:
./manage.py migrate myapp
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With