2014-06-16 10 views
1

이미 검색했지만 내 문제에 대한 해결책을 찾지 못했습니다 ... 도와 주셔서 감사합니다! 내 모델을 내 데이터베이스로 마이 그 레이션하고 싶지만 마이 그 레이션하는 동안 오류가 있습니다.Django 모델 ListFields (djangotoolbox)를 사용하여 데이터베이스 이전

내 모델 및 mysql 데이터베이스의 djangotoolbox에서 ListField를 사용할 때까지 아무런 오류가 없었습니다. 나는 이것을 djangotoolbox.fields.ListField로 정의해야한다고 생각했지만 그것을 인식하지 못하는 것 같습니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까? 미리 감사드립니다.

내가 가지고있는 데이터는 2-uplets 목록입니다. 예를 들어 : 여기서

from djangotoolbox.fields import ListField 
class Abaque(models.Model): 
     listeAGE = ListField(models.FloatField(default=0)) 

내 기지 : [85.4,2.6], ... [12.3,0.8], [16.5,0.6, 여기서

내 장고 모델 listeAGE =이고 마이그레이션 :

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'}), 
    }, 
    } 

가 그럼 난 마이그레이션, 내 데이터베이스, syncdb를 작성하지만 다음과 같은 오류가 있습니다 일

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. 

답변

0

I을 잉크 문제는 여기에 있습니다 :

u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 
    'listeAGE': ('djangotoolbox.fields.ListField',{'default': '0'}), 

참고 난 당신이 수동으로 추가 추측 id 필드 정의 및 목록 필드의 차이 ... id

있는 동안 당신의 튜플은 두 요소가 http://south.readthedocs.org/en/latest/customfields.html#south-field-triple

남쪽

그래서 당신이 할 필요가 둘 중 하나 (단지 클래스) 또는 세 (클래스 + 인수 목록 kwargs로의 + DICT)를 기대 나타납니다

'listeAGE': ('djangotoolbox.fields.ListField', [], {'default': '0'}), 
    etc 
+0

고마워요. 이것은 실수였습니다 ...하지만 다른 문제가 발생하여 장고가 다중 데이터를 mySQL에 보낼 수 없기 때문에 내 데이터를 jsonify해야 할 것이라고 생각합니다. 사실, 목록을 포함하는 객체를 저장할 때 django는 고유 한 데이터를 mySQL에 보냅니다. mySQL은 목록 대신 단일 값을 가지며 오류가 발생합니다. (또는 그렇게 생각합니다 ...) 나는 수레의 간단한리스트가 장고와 함께 저장하기가 매우 놀랍다 ... – user3061010