1. 在update Category tabole with SlugField中,起因是url会将空格自动转换成%20,为了把url变得美观,易读,可以用slugify,它可以把空格替换为连字符(‘-’),例如“how do i create a slug in django” 变成了“how-do-i-create-a-slug-in-django”.当然slugify还有其他用法,

Converts to ASCII. Converts spaces to hyphens. Removes characters that aren’t alphanumerics, underscores, or hy-
phens. Converts to lowercase. Also strips leading and trailing whitespace.

slugify

然后我们就需要在model里面的类Category中添加如下:

##put the import top
from django.template.defaultfilters import slugify

##inset the following into the class Category
slug = models.SlugField(default='', unique=True)

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

当我们继续makemigrations,migrate和执行populate脚本文件时,ERROR出现了:

IntegrityError: could not create unique index
"rango_category_slug_key"
DETAIL: Key (slug)=() is duplicated.

啊,电脑开始不按剧本来了,于是我就有了如下尝试:

  1. 删除 unique=True,因为提示无法创建unique索引,然后重新migrate,结果  -----> Fail;
  2. 删除SlugField,尝试回到从前,然后重新migrate,结果  -----> Fail;
  3. 进入admin进行设置,结果  -----> Fail;
  4. 于是我怒了,删除了db,结果  -----> Fail,再migrate,得到的是另一个以前版本的结果,再也回不来了。

于是我bing,SO,都没有具体的解释,后来在一个tango-TaichungPy的文件里找到了解决方法[1](非常感谢作者,感觉我被折磨了一天都没完)。问题产生的原因是什么呢?

就是 unique=True,而替换的name也是unique=True的,但为什么要设置SlugField为unique呢?因为你不想Joel is A Cat和JOEL IS A CAT都被slugify成同一个joel-is-a-cat,所以name时unique的无法保证slug也是unique。

但是如果同时设置,就出错了。解决方法如下:

  1. 去掉model.py中的unique=True;
  2. 删除migrate失败的py文件(在migrations里),就是提示错误之后的py文件都删掉;
  3. 重新migrations和migrate,然后执行populate_rango,这里,因为我们override了save这个method,我觉得需要在populated_rango.py里对category重新save,这时可以进admin查看一下,发现显示如我们所愿了;
  4. 设置SlugField中unique=True;
  5. migrations和migrate

得到的教训是什么呢?在model.py添加新的field时,限制条件要慎重加!!!

一般常见的constraint有:unique=True, blank=False,null=False...

参考文献:

  [1] tango-TaichungPy,作者是台湾的python爱好者,Excellent!

                                           stay tuned...

Tango_with_django_17笔记的更多相关文章

  1. git-简单流程(学习笔记)

    这是阅读廖雪峰的官方网站的笔记,用于自己以后回看 1.进入项目文件夹 初始化一个Git仓库,使用git init命令. 添加文件到Git仓库,分两步: 第一步,使用命令git add <file ...

  2. js学习笔记:webpack基础入门(一)

    之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...

  3. SQL Server技术内幕笔记合集

    SQL Server技术内幕笔记合集 发这一篇文章主要是方便大家找到我的笔记入口,方便大家o(∩_∩)o Microsoft SQL Server 6.5 技术内幕 笔记http://www.cnbl ...

  4. PHP-自定义模板-学习笔记

    1.  开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2.  整体架构图 ...

  5. PHP-会员登录与注册例子解析-学习笔记

    1.开始 最近开始学习李炎恢老师的<PHP第二季度视频>中的“章节5:使用OOP注册会员”,做一个学习笔记,通过绘制基本页面流程和UML类图,来对加深理解. 2.基本页面流程 3.通过UM ...

  6. NET Core-学习笔记(三)

    这里将要和大家分享的是学习总结第三篇:首先感慨一下这周跟随netcore官网学习是遇到的一些问题: a.官网的英文版教程使用的部分nuget包和我当时安装的最新包版本不一致,所以没法按照教材上给出的列 ...

  7. springMVC学习笔记--知识点总结1

    以下是学习springmvc框架时的笔记整理: 结果跳转方式 1.设置ModelAndView,根据view的名称,和视图渲染器跳转到指定的页面. 比如jsp的视图渲染器是如下配置的: <!-- ...

  8. 读书笔记汇总 - SQL必知必会(第4版)

    本系列记录并分享学习SQL的过程,主要内容为SQL的基础概念及练习过程. 书目信息 中文名:<SQL必知必会(第4版)> 英文名:<Sams Teach Yourself SQL i ...

  9. 2014年暑假c#学习笔记目录

    2014年暑假c#学习笔记 一.C#编程基础 1. c#编程基础之枚举 2. c#编程基础之函数可变参数 3. c#编程基础之字符串基础 4. c#编程基础之字符串函数 5.c#编程基础之ref.ou ...

随机推荐

  1. asp.net mvc4 easyui datagrid 增删改查分页 导出 先上传后导入 NPOI批量导入 导出EXCEL

    效果图 数据库代码 create database CardManage use CardManage create table CardManage ( ID ,) primary key, use ...

  2. BZOJ 2879 NOI2012美食节

    链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2879 CZ市为了欢迎全国各地的同学,特地举办了一场盛大的美食节.作为一个喜欢尝鲜的美食客,小M ...

  3. LeetCode_Wildcard Matching

    Implement wildcard pattern matching with support for '?' and '*'. '?' Matches any single character. ...

  4. Linux驱动开发相关

    一般用printk 查看/etc/sysconf文件,看看内核调试信息放到了哪里 打印的消息一般放在/var/log/messages文件里面. 如果你是在X Windows下的XTerm中insmo ...

  5. Android和FTP服务器交互,上传下载文件(实例demo)

    今天同学说他备份了联系人的数据放在一个文件里,想把它存到服务器上,以便之后可以进行下载恢复..于是帮他写了个上传,下载文件的demo 主要是 跟FTP服务器打交道-因为这个东东有免费的可以身亲哈 1. ...

  6. linux系统下svn服务器操作命令

    linux系统下svn服务器操作命令 .输出指定文件或URL的内容.  svncat 目标[@版本]…如果指定了版本,将从指定的版本开始查找. svncat -r PREV filename > ...

  7. 转:MVC分页

    原文地址:http://www.cnblogs.com/iamlilinfeng/p/4075292.html 分页总是搞得我很烦,也是因为刚接触,貌似有好多插件,之前在用一个,可是后来发现一翻页原来 ...

  8. cf448D Multiplication Table

    D. Multiplication Table time limit per test 1 second memory limit per test 256 megabytes input stand ...

  9. c++ 03

    一.面向对象编程 1.什么是对象?什么是对象编程? 1)万物皆对象 2)世界是由一组相互之间紧密联系的对象组成的. 3)通过将对象按照属性和行为共性进行分类,达到将具体事物进行抽象的效果. 4)通过程 ...

  10. C 本地文件夸网文件Cp操作

    1,linux平台C简单实现本地文件cp 码子及运行效果测试