I made some changes to one of my tables in models.py and tried to migrate using "python manage.py migrate", and it took several hours. I just changed the names of the three field names (columns) and it worked for more than 2 hours. It went smoothly (I think) for several minutes when I created the table earlier this morning. The start of the season is a model in which changes have been made.
Here is what models.py looks like now:
from django.db import models from django.contrib.gis.db import models as gismodels # from django.contrib.gis import admin # Create your models here. class Location(models.Model): # table name automatically chirps_location locationID = models.IntegerField(default=0, primary_key=True) lat = models.FloatField(default=0.0) lon = models.FloatField(default=0.0) geom = gismodels.PointField(null=True) objects = gismodels.GeoManager() def __unicode__(self): return u"LocationID: " + unicode(self.locationID) # admin.site.unregister(Location) # admin.site.register(Location, admin.OSMGeoAdmin) class Rainfall(models.Model): location = models.ForeignKey(Location) year = models.IntegerField(default=0) pentad_num = models.IntegerField(default=0) pentad_val = models.FloatField(default=0.0) class Meta: ordering = ['location', 'year', 'pentad_num'] def __unicode__(self): return u"LocationID: " + unicode(self.location.locationID) + u" Year: " + unicode(self.year) + u" Pentad: " + unicode(self.pentad_num) class Start_of_Season(models.Model): location = models.ForeignKey(Location) crop = models.CharField(default='', max_length=40) year = models.IntegerField(default=0) first_rain = models.IntegerField(default=0) onset_rain = models.IntegerField(default=0) start_season = models.IntegerField(default=0) class Meta: ordering = ['location', 'crop', 'year'] def __unicode__(self): return u"LocationID: " + unicode(self.location.locationID) + u" Year: " + unicode(self.year) + u" Start of Season pentad: " + unicode(self.start_season)
There was also some kind of strange behavior that I could not explain before this happened, so I will give a brief summary of all this if it is all connected.
At first, my Start_of_Season class looked like this (note that the only difference is the names of the last 3 fields):
class Start_of_Season(models.Model): location = models.ForeignKey(Location) crop = models.CharField(default='', max_length=40) year = models.IntegerField(default=0) first_rain_pentad = models.IntegerField(default=0) onset_rain_pentad = models.IntegerField(default=0) start_season_pentad = models.IntegerField(default=0) class Meta: ordering = ['location', 'crop', 'year'] def __unicode__(self): return u"LocationID: " + unicode(self.location.locationID) + u" Year: " + unicode(self.year) + u" Start of Season pentad: " + unicode(self.start_season)
Migration:
python manage.py makemigrations python manage.py migrate
appeared smoothly.
But when I ran the python script (excerpt) to add rows to this newly created Start_of_Season table:
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "access.settings") from chirps.models import Location, Rainfall, Start_of_Season django.setup() try: with transaction.atomic(): for loc in Location.objects.all(): locID = loc.locationID for yr in range(1981, 2014): # some computations to find: c1, c2, c3 start_of_season = Start_of_Season() start_of_season.location = Location.objects.get(locationID = locID) start_of_season.crop = 'millet' start_of_season.year = yr start_of_season.first_rain_pentad = c1 start_of_season.onset_rain_pentad = c2 start_of_season.start_season_pentad = c3 start_of_season.save()
At first, rows were never added to the database (at least in psql). Then I got the error message "start_of_season does not have a start_season attribute", which is strange because I never tried to access this attribute in my script, only "start_of_season.start_season_pentad"
So then I thought, well, I will change the names of the fields so that this attribute has start_of_season . . And this is when I edited models.py to look like an excerpt at the top of the post.
After updating the update models.py,
python manage.py makemigrations
works without errors:
(access_mw) mwooten@ip-10-159-67-226 :~/dev/access$ python manage.py makemigrations Did you rename start_of_season.first_rain_pentad to start_of_season.first_rain (a IntegerField)? [y/N] y Did you rename start_of_season.onset_rain_pentad to start_of_season.onset_rain (a IntegerField)? [y/N] y Did you rename start_of_season.start_season_pentad to start_of_season.start_season (a IntegerField)? [y/N] y Migrations for 'chirps': 0010_auto_20150901_1454.py: - Rename field first_rain_pentad on start_of_season to first_rain - Rename field onset_rain_pentad on start_of_season to onset_rain - Rename field start_season_pentad on start_of_season to start_season
but:
python manage.py migrate
stuck here for hours:
(access_mw) mwooten@ip-10-159-67-226 :~/dev/access$ python manage.py migrate Operations to perform: Synchronize unmigrated apps: staticfiles, gis, djgeojson, messages, leaflet Apply all migrations: admin, chirps, contenttypes, auth, sessions Synchronizing apps without migrations: Creating tables... Running deferred SQL... Installing custom SQL... Running migrations: Rendering model states... DONE Applying chirps.0010_auto_20150901_1454...
I do not understand why this should take so long, because, as it did not create the actual table, it is not. I am also not sure why I am getting other errors. Any ideas on what's going on?
thanks