2012-03-16 5 views
2

現在、モデルにデータをインスタンス化するfixtures/initial_data.jsonというファイルがあります。私は、私が初めて実行するときにすべてがスムーズに行くので、jsonに問題はないことを知っている。./manage syncdb(Django)南で移行するたびに、fixtures/initial_data.jsonについてエラーが発生します

私は南を使用することをアプリに変換した後、私は./manage migrate doorsを実行するたびに、私はこのトレースバックを得る:

:移行はまだそれが成功したと言うので、

Running migrations for doors: 
- Migrating forwards to 0002_auto__del_field_userprofile_status. 
> doors:0002_auto__del_field_userprofile_status 
- Loading initial data for doors. 
Problem installing fixture '/Users/hobbes3/Sites/mysite/doors/fixtures/initial_data.json': Traceback (most recent call last): 
    File "/Users/hobbes3/.virtualenvs/doors/lib/python2.7/site-packages/django/core/management/commands/loaddata.py", line 174, in handle 
    obj.save(using=using) 
    File "/Users/hobbes3/.virtualenvs/doors/lib/python2.7/site-packages/django/core/serializers/base.py", line 165, in save 
    models.Model.save_base(self.object, using=using, raw=True) 
    File "/Users/hobbes3/.virtualenvs/doors/lib/python2.7/site-packages/django/db/models/base.py", line 526, in save_base 
    rows = manager.using(using).filter(pk=pk_val)._update(values) 
    File "/Users/hobbes3/.virtualenvs/doors/lib/python2.7/site-packages/django/db/models/query.py", line 491, in _update 
    return query.get_compiler(self.db).execute_sql(None) 
    File "/Users/hobbes3/.virtualenvs/doors/lib/python2.7/site-packages/django/db/models/sql/compiler.py", line 869, in execute_sql 
    cursor = super(SQLUpdateCompiler, self).execute_sql(result_type) 
    File "/Users/hobbes3/.virtualenvs/doors/lib/python2.7/site-packages/django/db/models/sql/compiler.py", line 735, in execute_sql 
    cursor.execute(sql, params) 
    File "/Users/hobbes3/.virtualenvs/doors/lib/python2.7/site-packages/django/db/backends/util.py", line 34, in execute 
    return self.cursor.execute(sql, params) 
    File "/Users/hobbes3/.virtualenvs/doors/lib/python2.7/site-packages/django/db/backends/postgresql_psycopg2/base.py", line 44, in execute 
    return self.cursor.execute(query, args) 
IntegrityError: null value in column "created" violates not-null constraint 

今私は、エラーを無視

(doors)[email protected] ~/Sites/mysite $ python manage.py migrate doors --list 

doors 
    (*) 0001_initial 
    (*) 0002_auto__del_field_userprofile_status 

サウスが最初にテーブルを切り捨てずにJSONをリロードしようとしているかどうかはわかりません(プライマリキーの競​​合がありますか?)。しかし、Southのようなエラーは、createdフィールドをNULLに設定してデータを挿入しようとしているようです。なぜ私はそれをしようとしているのか分かりません。

は、私はいつも、移行後に発見された器具を挿入しようと、これは便利ですかどうかわからないんだけど、ここで私のinitial_data.json

[ 
    { 
     "model" : "doors.usertype", 
     "pk" : 1, 
     "fields" : { 
      "name" : "tenant" 
     } 
    }, 
    { 
     "model" : "doors.usertype", 
     "pk" : 2, 
     "fields" : { 
      "name" : "property manager" 
     } 
    }, 
    { 
     "model" : "doors.usertype", 
     "pk" : 3, 
     "fields" : { 
      "name" : "property owner" 
     } 
    }, 
     { 
     "model" : "doors.usertype", 
     "pk" : 4, 
     "fields" : { 
      "name" : "vendor" 
     } 
    }, 
    { 
     "model" : "doors.usertype", 
     "pk" : 5, 
     "fields" : { 
      "name" : "web user" 
     } 
    }, 
    { 
     "model" : "doors.doorsgroup", 
     "pk" : 1, 
     "fields" : { 
      "name"    : "Moderator", 
      "comment"    : "Moderators can create, edit, and delete all orders. They can also modify users, vendors, and places. They can comment on any orders and delete comments. They can view and manage all users.", 
      "view_all_users"  : true, 
      "manage_all_users" : true, 
      "view_all_orders"  : true, 
      "create_orders"  : true, 
      "edit_all_orders"  : true, 
      "manage_orders"  : true, 
      "delete_orders"  : true, 
      "create_comments"  : true, 
      "create_any_comments" : true, 
      "delete_comments"  : true, 
      "view_vendors"  : true, 
      "modify_vendors"  : true, 
      "view_places"   : true, 
      "modify_places"  : true 
     } 
    }, 
    { 
     "model" : "doors.doorsgroup", 
     "pk" : 2, 
     "fields" : { 
      "name"   : "Manager", 
      "comment"   : "Managers can view, edit, and delete all orders. They can also approve, reject, or close orders. They can view all users.", 
      "view_all_users" : true, 
      "view_all_orders" : true, 
      "create_orders" : true, 
      "edit_all_orders" : true, 
      "manage_orders" : true, 
      "delete_orders" : true, 
      "create_comments" : true, 
      "view_vendors" : true, 
      "view_places"  : true 
     } 
    }, 
    { 
     "model" : "doors.doorsgroup", 
     "pk" : 3, 
     "fields" : { 
      "name"   : "Tenant", 
      "comment"   : "Tenants can create orders, comment on their orders, and view vendors and places.", 
      "create_orders" : true, 
      "create_comments" : true, 
      "view_vendors" : true, 
      "view_places"  : true 
     } 
    }, 
    { 
     "model" : "doors.doorsgroup", 
     "pk" : 4, 
     "fields" : { 
      "name"   : "Vendor", 
      "comment"   : "Vendors can only comment on the orders that are assigned to them.", 
      "create_comments" : true 
     } 
    }, 
    { 
     "model" : "doors.doorsgroup", 
     "pk" : 5, 
     "fields" : { 
      "name"   : "Observer", 
      "comment"   : "Observers can view all users, orders, vendors, and places.", 
      "view_all_users" : true, 
      "view_all_orders" : true, 
      "view_vendors" : true, 
      "view_places"  : true 
     } 
    } 
] 

であると私models.py

class DoorsGroup(models.Model) : 
    def __unicode__(self) : 
     return self.name 

    name = models.CharField(max_length = 135) 
    comment = models.TextField(blank = True) 

    # Permissions. 
    view_all_users = models.BooleanField() 
    manage_all_users = models.BooleanField() # Assign to places or to vendors. 

    view_all_orders = models.BooleanField() 
    create_orders = models.BooleanField() 
    edit_all_orders = models.BooleanField() 
    manage_orders = models.BooleanField() # Can approve, reject, and close orders. 
    delete_orders = models.BooleanField() 

    create_comments  = models.BooleanField() 
    create_any_comments = models.BooleanField() # Can comment on any orders. 
    delete_comments  = models.BooleanField() 

    view_vendors = models.BooleanField() 
    modify_vendors = models.BooleanField() # Can create, edit, and delete vendors. 

    view_places = models.BooleanField() 
    modify_places = models.BooleanField() 

    created = models.DateTimeField(auto_now_add = True) 
    modified = models.DateTimeField(auto_now = True) 

class UserType(models.Model) : 
    def __unicode__(self) : 
     return self.name 

    name  = models.CharField(max_length = 135) 
    created = models.DateTimeField(auto_now_add = True) 
    modified = models.DateTimeField(auto_now = True) 

答えて

4

南の一部。あなたのケースでは、移行後のおそらく旧式のjson fixtureと新しいDB状態のスキーマの非互換性によってエラーが発生しました。

./manage.py migrate doors --no-initial-data 

または固定具を手動で固定することで、固定具の挿入をスキップできます。

関連する問題