标签:
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.
然后我们就需要在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.
啊,电脑开始不按剧本来了,于是我就有了如下尝试:
于是我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添加新的field时,限制条件要慎重加!!!
一般常见的constraint有:unique=True, blank=False,null=False...
参考文献:
[1] tango-TaichungPy,作者是台湾的python爱好者,Excellent!
stay tuned...
标签:
原文地址:http://www.cnblogs.com/FARAMIR/p/4632355.html