Collectives™ on Stack Overflow
Find centralized, trusted content and collaborate around the technologies you use most.
Learn more about Collectives
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
Learn more about Teams
I have read a lot of other posts here on stackoverflow and google but I could not find a solution.
It all started when I changed the model from a CharField to a ForeignKey.
The error I recieve is:
Operations to perform:
Synchronize unmigrated apps: gis, staticfiles, crispy_forms, geoposition, messages
Apply all migrations: venues, images, amenities, cities_light, registration, auth, admin, sites, sessions, contenttypes, easy_thumbnails, newsletter
Synchronizing apps without migrations:
Creating tables...
Running deferred SQL...
Installing custom SQL...
Running migrations:
Rendering model states... DONE
Applying venues.0016_auto_20160514_2141...Traceback (most recent call last):
File "/Users/iam-tony/.envs/venuepark/lib/python3.4/site-packages/django/db/backends/utils.py", line 64, in execute
return self.cursor.execute(sql, params)
psycopg2.IntegrityError: column "venue_city" contains null values
My model is as follows:
class Venue(models.Model):
venue_city = models.ForeignKey(City, null=True,)
venue_country=models.ForeignKey(Country, null=True)
venue_country did not exist before so that migration happened successfully. But venue_city was a CharField.
I made some changes to my migration file so that it would execute the sql as follows:
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('venues', '0011_venue_map_activation'),
migrations.RunSQL(''' ALTER TABLE venues_venue ALTER venue_city TYPE integer USING venue_city::integer '''),
migrations.RunSQL(''' ALTER TABLE venues_venue ALTER venue_city RENAME COLUMN venue_city TO venue_city_id '''),
migrations.RunSQL(''' ALTER TABLE venues_venue ADD CONSTRAINT venues_venus_somefk FOREIGN KEY (venue_city_id) REFERENCES cities_light (id) DEFERRABLE INITIALLY DEFERRED'''),
Thanks in advance!
UPDATE: my new migration file:
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('cities_light', '0006_compensate_for_0003_bytestring_bug'),
('venues', '0024_remove_venue_venue_city'),
operations = [
migrations.AddField(
model_name='venue',
name='venue_city',
field=models.ForeignKey(null=True, to='cities_light.City'),
–
Looks like you added null=True
after created migration file. Because venue_city
is not a nullable field in your migration file
Follow these steps.
1) Drop venue_city & venue_country from your local table
3) Delete all the migration files you created for these `CharField to a ForeignKey` change
4) execute `python manage.py makemigrations`
5) execute 'python manage.py migrate'
It should work
–
–
add null=True, blank=True in Venue model class
eg: venue_city = models.ForeignKey(City, null=True, blank=True)
delete venues.0016_auto_20160514_2141 migration file from migrations folder in your app
then run python manage.py makemigrations
then run python manage.py migrate
no need to drop table or remove migrations from migration tables
First delete last migration that face problem
Then add like venue_city = models.CharField(blank=True, null=True)
Finally use makemigrations
and migrate
command
As the error says, you have a null value in the "venue_city" column.
It seems at the time of defining your model you had not included "null=True".
So it returns null because there is nothing in your 'venue_city" variable. Consider deleting the last migration file and perform another migration using
python manage.py makemigrations
and python manage.py migrate
commands.
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.