django.db.utils.IntegrityError:UNIQUE约束失败:rango_category__new.slug [英] django.db.utils.IntegrityError: UNIQUE constraint failed: rango_category__new.slug

查看:4747
本文介绍了django.db.utils.IntegrityError:UNIQUE约束失败:rango_category__new.slug的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我从Django和Tango一起学习Django,当我输入以下内容时,我会收到这个错误:

  python manage.py makemigrations rango 
python manage.py migrate

这是输出:

  django.db.utils.IntegrityError:UNIQUE约束失败:rango_category__new.slug 

Models.py:

 从django.db导入模型
从django.template.defaultfilters import slugify

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

def save(self,* args,* * kwargs)
self.slug = slugify(self.name)
super(Category,self).save(* args,** kwargs)

def __unicode __(self ):
return self.name


class Page(models。模型):
category = models.ForeignKey(Category)
title = models.CharField(max_length = 128)
url = models.URLField()
views = models.IntegerField默认= 0)

def __unicode __(self):
return self.title


解决方案

这个约束的原因可能是您在<$ c $中没有任何名为 slug 的字段当您初次迁移它(第一次迁移),并且在模型中添加此字段之后,当您运行 makemigrations 时,您可以使用c>类别将默认值设置为静态值(即 None 或等),并且破坏了类别表的slug列的唯一约束,其中slug应该是唯一的,但是不是因为所有的条目都将获得该默认值。



要解决这个问题,您可以删除数据库和迁移文件,并重新运行 makemigrations 迁移或设置一个唯一的默认值,如下所示:

  slug = models.SlugField(unique = default = uuid.uuid1)



编辑:



根据这个,修改您的迁移文件以克服独特的约束。例如,修改您的迁移文件(其中添加了slug字段到模型中),如下所示:

  import uuid 
来自app.models import类别#where app == tango_app_name

class Migration(migrations.Migration):

依赖关系= [
('yourproject','0003_remove_category_slug ')

$ b def gen_uuid(apps,schema_editor):
在Category.objects.all()中的行:
row.slug = uuid.uuid4 ()
row.save()

operations = [
migrations.AddField(
model_name ='category',
name ='slug',
field = models.SlugField(default = uuid.uuid4),
preserve_default = True,
),
migrations.RunPython(gen_uuid),

migrations.AlterField(
model_name ='category',
name ='slug',
field = models.SlugField(default = uui d.uuid4,unique = True),
),
]


I learning Django from Tango with Django and I keep getting this error when I type:

python manage.py makemigrations rango
python manage.py migrate

This is the output:

django.db.utils.IntegrityError: UNIQUE constraint failed: rango_category__new.slug

Models.py:

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

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

    def save(self, *args, **kwargs):
        self.slug = slugify(self.name)
        super(Category, self).save(*args, **kwargs)

    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

解决方案

The reason for this constrain could be that you didn't have any field called slug in Category class when you have initially migrated it(First Migration), and after adding this field in the model, when you ran makemigrations, you have set default value to something static value(i.e None or '' etc), and which broke the unique constrain for the Category's table's slug column in which slug should be unique but it isn't because all the entry will get that default value.

To solve this, you can either drop the database and migration files and re-run makemigrations and migrate or set a unique default value like this:

slug = models.SlugField(unique=True, default=uuid.uuid1)

Edit:

According to this, modify your migration file to overcome unique constrain. For example, modify your migration file(which added the slug field to the model) like this:

import uuid
from app.models import Category  #where app == tango_app_name

class Migration(migrations.Migration):

    dependencies = [
        ('yourproject', '0003_remove_category_slug'),
    ]

    def gen_uuid(apps, schema_editor):
        for row in Category.objects.all():
            row.slug = uuid.uuid4()
            row.save()

    operations = [
        migrations.AddField(
            model_name='category',
            name='slug',
            field=models.SlugField(default=uuid.uuid4),
            preserve_default=True,
        ),
        migrations.RunPython(gen_uuid),

        migrations.AlterField(
            model_name='category',
            name='slug',
            field=models.SlugField(default=uuid.uuid4, unique=True),
        ),
    ]

这篇关于django.db.utils.IntegrityError:UNIQUE约束失败:rango_category__new.slug的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆