Python can';由于“原因”,无法在django cms上发布页面;IntegrityError:重复的键值违反了唯一约束;

Python can';由于“原因”,无法在django cms上发布页面;IntegrityError:重复的键值违反了唯一约束;,python,django,postgresql,web-applications,django-cms,Python,Django,Postgresql,Web Applications,Django Cms,在我的django cms网站中,我在通过管理界面发布页面时遇到了一些问题。在stacktrace下面: DEBUG 2013-06-07 14:09:31,562 util 32222 140056576640768 (0.000) SELECT DISTINCT "menus_cachekey"."key" FROM "menus_cachekey" WHERE "menus_cachekey"."site" = 1 ; args=(1,) DEBUG 2013-06-07 14:0

在我的django cms网站中,我在通过管理界面发布页面时遇到了一些问题。在stacktrace下面:

    DEBUG 2013-06-07 14:09:31,562 util 32222 140056576640768 (0.000) SELECT DISTINCT "menus_cachekey"."key" FROM "menus_cachekey" WHERE "menus_cachekey"."site" = 1 ; args=(1,)
DEBUG 2013-06-07 14:09:31,565 util 32222 140056576640768 (0.000) DELETE FROM "menus_cachekey" WHERE "menus_cachekey"."site" = 1 ; args=(1,)
DEBUG 2013-06-07 14:09:31,570 util 32222 140056576640768 (0.001) INSERT INTO "cms_page" ("created_by", "changed_by", "parent_id", "creation_date", "changed_date", "publication_date", "publication_end_date", "in_navigation", "soft_root", "reverse_id", "navigation_extenders", "published", "template", "site_id", "login_required", "limit_visibility_in_menu", "level", "lft", "rght", "tree_id", "publisher_is_draft", "publisher_public_id", "publisher_state") VALUES (E'roberto', E'roberto', NULL, E'2013-06-07 12:09:31.567872+00:00', E'2013-06-07 12:09:31.567989+00:00', E'2013-06-07 12:09:26.553334+00:00', NULL, false, false, NULL, NULL, true, E'unicms/departments_and_groups/department_detail.html', 1, false, NULL, 0, 1, 2, 9, false, 9, 0) RETURNING "cms_page"."id"; args=(u'roberto', u'roberto', None, u'2013-06-07 12:09:31.567872+00:00', u'2013-06-07 12:09:31.567989+00:00', u'2013-06-07 12:09:26.553334+00:00', None, False, False, None, None, True, u'unicms/departments_and_groups/department_detail.html', 1, False, None, 0, 1, 2, 9, False, 9, 0)
ERROR 2013-06-07 14:09:31,571 base 32222 140056576640768 Internal Server Error: /admin/cms/page/9/change-status/
Traceback (most recent call last):
  File "/home/roberto/.virtualenvs/ve_news2_app/local/lib/python2.7/site-packages/django/core/handlers/base.py", line 115, in get_response
    response = callback(request, *callback_args, **callback_kwargs)
  File "/home/roberto/.virtualenvs/ve_news2_app/local/lib/python2.7/site-packages/django/utils/decorators.py", line 91, in _wrapped_view
    response = view_func(request, *args, **kwargs)
  File "/home/roberto/.virtualenvs/ve_news2_app/local/lib/python2.7/site-packages/django/views/decorators/cache.py", line 89, in _wrapped_view_func
    response = view_func(request, *args, **kwargs)
  File "/home/roberto/.virtualenvs/ve_news2_app/local/lib/python2.7/site-packages/django/contrib/admin/sites.py", line 202, in inner
    return view(request, *args, **kwargs)
  File "/home/roberto/.virtualenvs/ve_news2_app/local/lib/python2.7/site-packages/django/utils/decorators.py", line 25, in _wrapper
    return bound_func(*args, **kwargs)
  File "/home/roberto/.virtualenvs/ve_news2_app/local/lib/python2.7/site-packages/django/views/decorators/http.py", line 41, in inner
    return func(request, *args, **kwargs)
  File "/home/roberto/.virtualenvs/ve_news2_app/local/lib/python2.7/site-packages/django/utils/decorators.py", line 21, in bound_func
    return func(self, *args2, **kwargs2)
  File "/home/roberto/.virtualenvs/ve_news2_app/local/lib/python2.7/site-packages/cms/admin/pageadmin.py", line 1062, in change_status
    success = method()
  File "/home/roberto/.virtualenvs/ve_news2_app/local/lib/python2.7/site-packages/cms/models/pagemodel.py", line 419, in publish
    public_page.save()
  File "/home/roberto/.virtualenvs/ve_news2_app/local/lib/python2.7/site-packages/cms/models/pagemodel.py", line 367, in save
    super(Page, self).save(**kwargs)
  File "/home/roberto/.virtualenvs/ve_news2_app/local/lib/python2.7/site-packages/mptt/models.py", line 696, in save
    super(MPTTModel, self).save(*args, **kwargs)
  File "/home/roberto/.virtualenvs/ve_news2_app/local/lib/python2.7/site-packages/django/db/models/base.py", line 546, in save
    force_update=force_update, update_fields=update_fields)
  File "/home/roberto/.virtualenvs/ve_news2_app/local/lib/python2.7/site-packages/cms/models/pagemodel.py", line 384, in save_base
    ret = super(Page, self).save_base(*args, **kwargs)
  File "/home/roberto/.virtualenvs/ve_news2_app/local/lib/python2.7/site-packages/django/db/models/base.py", line 650, in save_base
    result = manager._insert([self], fields=fields, return_id=update_pk, using=using, raw=raw)
  File "/home/roberto/.virtualenvs/ve_news2_app/local/lib/python2.7/site-packages/django/db/models/manager.py", line 215, in _insert
    return insert_query(self.model, objs, fields, **kwargs)
  File "/home/roberto/.virtualenvs/ve_news2_app/local/lib/python2.7/site-packages/django/db/models/query.py", line 1661, in insert_query
    return query.get_compiler(using=using).execute_sql(return_id)
  File "/home/roberto/.virtualenvs/ve_news2_app/local/lib/python2.7/site-packages/django/db/models/sql/compiler.py", line 937, in execute_sql
    cursor.execute(sql, params)
  File "/home/roberto/.virtualenvs/ve_news2_app/local/lib/python2.7/site-packages/django/db/backends/util.py", line 41, in execute
    return self.cursor.execute(sql, params)
  File "/home/roberto/.virtualenvs/ve_news2_app/local/lib/python2.7/site-packages/django/db/backends/postgresql_psycopg2/base.py", line 56, in execute
    six.reraise(utils.IntegrityError, utils.IntegrityError(*tuple(e.args)), sys.exc_info()[2])
  File "/home/roberto/.virtualenvs/ve_news2_app/local/lib/python2.7/site-packages/django/db/backends/postgresql_psycopg2/base.py", line 54, in execute
    return self.cursor.execute(query, args)
IntegrityError: duplicate key value violates unique constraint "cms_page_publisher_public_id_key"
部门模式非常简单

class Department(models.Model):
    research_area = models.ManyToManyField('research_area.ResearchArea', blank=True,
                                           related_name='departments')  # many-to-many
    products = models.ManyToManyField('products_activities.Product', blank=True, related_name="departments")
    employees = models.ManyToManyField('staff.Person', through='department.PersonDepartmentMembership',
                                       related_name='departments')  # TODO WARNINGS
    research_groups = models.ManyToManyField('group.Group', blank=True, related_name='departments',
                                             through="department.GroupDepartmentMembership")
    page = models.OneToOneField(Page, blank=True, related_name='department', null=True)


    name = models.CharField(_('department name'), max_length=50, default=_('Department name'))
    description = models.TextField(_('department description'))
    logo = models.ImageField(upload_to='img/departments')
    address = models.CharField(_('office address'), max_length=255)
    post_address = models.CharField(_('post address'), max_length=255)
    telephone = PhoneNumberField(blank=True, null=True)
    fax = PhoneNumberField(blank=True, null=True)
    email = models.EmailField()

    class Meta:
        permissions = (
            ('view_department', _('View department')),
        )

    def __unicode__(self):
        return self.name

    def get_absolute_url(self):
        return reverse('pages-details-by-slug', kwargs={'slug': self.page.get_slug('en')})
并非所有页面都受此问题影响。在我的cms中,我建立了一个自动页面创建系统。当用户创建部门时,将设置一个新页面

@receiver(post_save, sender=Department)
def _on_save_department_create_link_to_page(sender, instance, created, **kwargs):
    from cms.api import assign_user_to_page, add_plugin, publish_page
    if created:  # create department Page
        from cms.api import create_page

        instance.page = create_page(
            title=instance.name,
            language='en',
            published=False,
            template=settings.CMS_TEMPLATE_DEPARTMENT[0],
        )

        # add some plugins...

        editors = instance.employees.filter(cmsuser__groups__name__exact='web')
        for e in editors:
            assign_user_to_page(instance.page, e)
        instance.page.save()
我在互联网上发现,他可能是由于成功的南迁。我几乎不怀疑这一点,因为我在没有应用任何数据迁移的情况下也会出现错误


任何反馈都将不胜感激!提前感谢:-)

您的数据库表
cms\u page
中有一个约束,称为
cms\u page\u publisher\u public\u id\u key
。约束可以指定许多内容,但通常用于保持值的唯一性。在你的情况下,它似乎也是独一无二的:

duplicate key value violates unique constraint
在您的模型中,我看不到您指定为唯一的任何内容,但可能您随着时间的推移更改了代码,忘记了相应地更改数据库表


检查数据库中的表
cms\u页面
的外观以及约束
cms\u页面
的功能。然后您可能会找到原因。

由于升级django cms时中庸运行方式的变化,您需要运行:

python manage.py cms moderator on
有关更多信息,请参阅

如果您仍在处理某些仍给出该约束错误的页面,则需要打开django shell:

python manage.py dbshell
然后删除SQL的问题

delete from cms_page where publisher_public_id=79;

谢谢你的回答rednaw,我已经检查过数据库了。但最后,在页面创建中设置published=True似乎解决了这个问题。很好。我希望下次升级cms时它会有用:-)