【问题标题】:Slugfield in tango with djangoSlugfield 与 django 的探戈
【发布时间】:2015-01-28 13:26:15
【问题描述】:

我正在阅读本教程以了解 django 的基础知识,但我遇到了一个我无法解决的问题。

我在这个页面http://www.tangowithdjango.com/book17/chapters/models_templates.html 使用 sluglify 函数方法。

在教程中作者说我们必须在我们的类别模型中为 th slugfield 创建一个新行。就像我在这里展示的那样,我严格遵循所有步骤:

from django.db import models
from django.template.defaultfilters import slugify

class Category(models.Model):
    name = models.CharField(max_length=128, unique=True)
    likes = models.IntegerField(default=0)
    views = models.IntegerField(default=0)
    slug = models.SlugField(unique=True)

    def __unicode__(self):
        return self.name

class Page(models.Model):
    category = models.ForeignKey(Category)
    title = models.CharField(max_length=128)
    url = models.URLField()
    views = models.IntegerField(default=0)


    def __unicode__(self):
        return self.title

当我运行“makemgiration”命令时,一切都按预期工作:我选择第一个选项并提供''。但是当我运行“迁移”时,我得到:

django.db.utils.Integrity 错误:Slug 列不是唯一的

这里发生了什么?我已经重复了几次迁移并尝试了其他默认代码,但结局相同。我无法弄清楚我做错了什么。他们唯一剩下的就是我给了别的东西而不是''(首先我以为他们是''或')。

感谢您的宝贵时间和帮助!

【问题讨论】:

    标签: django slug


    【解决方案1】:

    我也在阅读教程,几天前我遇到了同样的问题。

    我认为问题在于您正在尝试添加一个新字段(slug)并使其对表中的每个元素都是唯一的,但如果我没记错的话,您的表中已经有一些数据该值不存在,因此该字段将为这些行获得的值不是唯一的,因此“django.db.utils.Integrity 错误:Slug 列不是唯一的”。

    我所做的只是删除表中的数据(因为它只有几个字段,所以没什么大不了的),然后将字段添加到模型中。之后,您可以将数据放回表中(如果您按照教程进行操作,则应该有一个用于自动填充表的脚本,因此您只需运行该脚本就可以了)。完成此操作后,表中的所有行都应该有一个唯一的 slug 字段(因为它是根据类别名称自动生成的)并且可以解决问题。

    请注意,如果您的表非常大,由于删除数据,这可能不是一个很好的解决方案,所以也许有更好的方法,例如将该字段添加到模型中而不是唯一的,然后运行脚本将每一行的 slug 字段设置为唯一值,然后将模型的字段设置为唯一但我对 SQL 不是很了解,第一个解决方案对我来说很好,所以它也应该适合你。

    【讨论】:

    • 感谢您的帮助!我稍后会尝试,看看删除数据是否会改变一些东西。我已经尝试添加没有唯一性的字段,但我不知道为什么它没有完成。如果迁移是,例如,0016,它会尝试将相关应用到我的情况下的唯一附加项 0006).... 结论:同样的错误,尽管它没有唯一的字段。
    【解决方案2】:

    删除db.sqlite3并重新运行

    python manage.py syncdb
    

    然后执行迁移

    python manage.py makemigrations rango
    python manage.py migrate
    

    并重新运行您的人口脚本。这是 Django 的一个缺点,每当您更改 models.py 时,都必须重新创建数据库。

    【讨论】:

      【解决方案3】:

      尝试从项目目录中删除 sqlite3.db 文件。我被困在一个类似的问题上,这确实有效..即使您修改了人口脚本,您也必须删除并重新创建 db 文件才能看到所做的更改....

      【讨论】:

        猜你喜欢
        • 2020-01-01
        • 1970-01-01
        • 2016-12-29
        • 1970-01-01
        • 1970-01-01
        • 2012-08-02
        • 2021-01-10
        • 1970-01-01
        • 2011-02-19
        相关资源
        最近更新 更多