(Джанго) Каждый раз, когда я мигрирую с юга, я получаю сообщение об ошибке fixtures / initial_data.json - PullRequest
2 голосов
/ 16 марта 2012

У меня сейчас есть файл под fixtures/initial_data.json, который создает данные в модели.Я знаю, что с json проблем нет, потому что все идет гладко при первом запуске ./manage syncdb.

После того, как я преобразовал приложение для использования на юг, каждый раз, когда я запускаю ./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)hobbes3@hobbes3 ~/Sites/mysite $ python manage.py migrate doors --list

 doors
  (*) 0001_initial
  (*) 0002_auto__del_field_userprofile_status

Я не уверен, что Юг пытается перезагрузить JSON без усечениятаблица первая (а есть ли конфликт первичных ключей?).Но ошибка звучит так, будто Юг пытается вставить данные с полем 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 )

1 Ответ

4 голосов
/ 16 марта 2012

Юг всегда пытайтесь вставить найденные приборы после миграции.В вашем случае ошибка была вызвана несовместимостью схемы, возможно, устаревшего устройства json и нового состояния БД после миграции.Все в порядке, чтобы пропустить вставку приборов на

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

или исправить прибор вручную.

...