Reputation: 11
I already searched but did not find a solution to my problem... Thanks for your help! I would like to migrate my Models to my database but I there are errors while migrating.
I hadn't any errors until using the ListField from the djangotoolbox in my Models and mysql database. I supposed I had to define these as a djangotoolbox.fields.ListField but it doesn't seem to recognize it. What am I doing wrong? Thank you in advance!
The datas I have are lists of 2-uplets. For example : listeAGE=[[12.3,0.8],[16.5,0.6],[85.4,2.6],...]
Here is my django model :
from djangotoolbox.fields import ListField
class Abaque(models.Model):
listeAGE = ListField(models.FloatField(default=0))
Here is my base to migrate :
from south.db import db
from south.v2 import SchemaMigration
from django.db import models
from djangotoolbox import fields
class Migration(SchemaMigration):
# Adding model 'Abaque'
db.create_table(u'ageBio_abaque', (
(u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
('listeAGE', self.gf('django.db.models.fields.FloatField')(default=False)),
))
db.send_create_signal(u'ageBio', ['Abaque'])
def backwards(self, orm):
models = {
u'ageBio.abaque': {
'Meta': {'object_name': 'Abaque'},
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'listeAGE': ('djangotoolbox.fields.ListField',{'default': '0'}),
'listeIMC': ('djangotoolbox.fields.ListField',{'default': '0'}),
'listeRTH': ('djangotoolbox.fields.ListField',{'default': '0'}),
'listeTAS': ('djangotoolbox.fields.ListField',{'default': '0'}),
'listeCHOL': ('djangotoolbox.fields.ListField',{'default': '0'}),
'listeGLY': ('djangotoolbox.fields.ListField',{'default': '0'}),
'listeTRIG': ('djangotoolbox.fields.ListField',{'default': '0'}),
'listeHEMO': ('djangotoolbox.fields.ListField',{'default': '0'}),
'listeVGM': ('djangotoolbox.fields.ListField',{'default': '0'}),
},
}
Then I create my database, syncdb, migrate but I have the following error :
Traceback (most recent call last):
File "C:\Users\Blablabla\workspace\ageBioDjango\manage.py", line 10, in <module>
execute_from_command_line(sys.argv)
File "C:\Python27\lib\site-packages\django\core\management\__init__.py", line 399, in execute_from_command_line
utility.execute()
File "C:\Python27\lib\site-packages\django\core\management\__init__.py", line 392, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "C:\Python27\lib\site-packages\django\core\management\base.py", line 242, in run_from_argv
self.execute(*args, **options.__dict__)
File "C:\Python27\lib\site-packages\django\core\management\base.py", line 285, in execute
output = self.handle(*args, **options)
File "C:\Python27\lib\site-packages\south\management\commands\migrate.py", line 111, in handle
ignore_ghosts = ignore_ghosts,
File "C:\Python27\lib\site-packages\south\migration\__init__.py", line 220, in migrate_app
success = migrator.migrate_many(target, workplan, database)
File "C:\Python27\lib\site-packages\south\migration\migrators.py", line 254, in migrate_many
result = migrator.__class__.migrate_many(migrator, target, migrations, database)
File "C:\Python27\lib\site-packages\south\migration\migrators.py", line 329, in migrate_many
result = self.migrate(migration, database)
File "C:\Python27\lib\site-packages\south\migration\migrators.py", line 133, in migrate
result = self.run(migration, database)
File "C:\Python27\lib\site-packages\south\migration\migrators.py", line 106, in run
south.db.db.current_orm = self.orm(migration)
File "C:\Python27\lib\site-packages\south\migration\migrators.py", line 279, in orm
return migration.orm()
File "C:\Python27\lib\site-packages\south\utils\__init__.py", line 62, in method
value = function(self)
File "C:\Python27\lib\site-packages\south\migration\base.py", line 432, in orm
return FakeORM(self.migration_class(), self.app_label())
File "C:\Python27\lib\site-packages\south\orm.py", line 48, in FakeORM
_orm_cache[args] = _FakeORM(*args)
File "C:\Python27\lib\site-packages\south\orm.py", line 127, in __init__
self.models[name] = self.make_model(app_label, model_name, data)
File "C:\Python27\lib\site-packages\south\orm.py", line 320, in make_model
raise ValueError("Field '%s' on model '%s.%s' has a weird definition length (should be 1 or 3 items)." % (fname, app, name))
ValueError: Field 'listeAGE' on model 'ageBio.Abaque' has a weird definition length (should be 1 or 3 items).
Finished "C:\Users\Blabla\workspace\ageBioDjango\manage.py migrate" execution.
Upvotes: 1
Views: 317
Reputation: 33823
I think the problem is here:
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'listeAGE': ('djangotoolbox.fields.ListField',{'default': '0'}),
note the difference between the id
field definition and your list fields which I guess you added by hand... your tuple has only two elements while the id
has three
http://south.readthedocs.org/en/latest/customfields.html#south-field-triple
South appears to expect either one (just the class) or all three (class + list of args + dict of kwargs)
So you need to do:
'listeAGE': ('djangotoolbox.fields.ListField', [], {'default': '0'}),
etc
Upvotes: 0