Tango_with_django_17笔记
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.
啊,电脑开始不按剧本来了,于是我就有了如下尝试:
- 删除 unique=True,因为提示无法创建unique索引,然后重新migrate,结果 -----> Fail;
- 删除SlugField,尝试回到从前,然后重新migrate,结果 -----> Fail;
- 进入admin进行设置,结果 -----> Fail;
- 于是我怒了,删除了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。
但是如果同时设置,就出错了。解决方法如下:
- 去掉model.py中的unique=True;
- 删除migrate失败的py文件(在migrations里),就是提示错误之后的py文件都删掉;
- 重新migrations和migrate,然后执行populate_rango,这里,因为我们override了save这个method,我觉得需要在populated_rango.py里对category重新save,这时可以进admin查看一下,发现显示如我们所愿了;
- 设置SlugField中unique=True;
- migrations和migrate
得到的教训是什么呢?在model.py添加新的field时,限制条件要慎重加!!!
一般常见的constraint有:unique=True, blank=False,null=False...
参考文献:
[1] tango-TaichungPy,作者是台湾的python爱好者,Excellent!
stay tuned...
最新文章
- struts 国际化
- 【USACO 1.5】SuperPrime Rib
- 第4章 jQuery的事件和动画(1)——事件篇
- php中的常用数组函数(一)(比较多个数组的差集的函数们 array_diff_assoc() array_diff() array_diff_key() array_diff_ukey() array_diff_uassoc())
- sencha touch之store
- Android SharedPreferences使用以及原理详解
- 分享一个客户端程序(winform)自动升级程序,思路+说明+源码
- Solr和IK分词器的整合
- activity 嵌套一级fragment,一级fragment嵌套二级fragment,在一级fragment中刷新二级fragment中的UI
- file_get_contents(";php://input";)的使用方法
- Linux LVM学习总结——Insufficient Free Extents for a Logical Volume
- Python_queue单项队列
- 八大排序算法——堆排序(动图演示 思路分析 实例代码java 复杂度分析)
- Maven中聚合与集成的区别
- vue项目中 axios 和Vue-axios的关系
- 网络传输 buf 封装 示例代码
- TP v5中Url Compat模式
- NET 集合分页查询
- Nfs的简单了解
- ORM一对多查询
热门文章
- winPcap_2_编译环境*注意*
- Git / Bower Errors: Exit Code # 128 &; Failed connect
- PHP面向对象编程快速入门
- ecshop中404错误页面设置
- 分享到QQ空间、新浪微博、腾讯微博的代码!
- ubuntu 下搭建一个python3的虚拟环境(用于django配合postgresql数据库开发)
- 深度学习word2vec笔记之算法篇
- windows下搭建NFS服务器
- hihoCoder 1041 国庆出游 (DFS)
- Java并发编程--Volatile详解