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...

最新文章

  1. struts 国际化
  2. 【USACO 1.5】SuperPrime Rib
  3. 第4章 jQuery的事件和动画(1)——事件篇
  4. php中的常用数组函数(一)(比较多个数组的差集的函数们 array_diff_assoc() array_diff() array_diff_key() array_diff_ukey() array_diff_uassoc())
  5. sencha touch之store
  6. Android SharedPreferences使用以及原理详解
  7. 分享一个客户端程序(winform)自动升级程序,思路+说明+源码
  8. Solr和IK分词器的整合
  9. activity 嵌套一级fragment,一级fragment嵌套二级fragment,在一级fragment中刷新二级fragment中的UI
  10. file_get_contents("php://input")的使用方法
  11. Linux LVM学习总结——Insufficient Free Extents for a Logical Volume
  12. Python_queue单项队列
  13. 八大排序算法——堆排序(动图演示 思路分析 实例代码java 复杂度分析)
  14. Maven中聚合与集成的区别
  15. vue项目中 axios 和Vue-axios的关系
  16. 网络传输 buf 封装 示例代码
  17. TP v5中Url Compat模式
  18. NET 集合分页查询
  19. Nfs的简单了解
  20. ORM一对多查询

热门文章

  1. winPcap_2_编译环境*注意*
  2. Git / Bower Errors: Exit Code # 128 & Failed connect
  3. PHP面向对象编程快速入门
  4. ecshop中404错误页面设置
  5. 分享到QQ空间、新浪微博、腾讯微博的代码!
  6. ubuntu 下搭建一个python3的虚拟环境(用于django配合postgresql数据库开发)
  7. 深度学习word2vec笔记之算法篇
  8. windows下搭建NFS服务器
  9. hihoCoder 1041 国庆出游 (DFS)
  10. Java并发编程--Volatile详解