我正在尝试在Django中创建一个唯一的slug,以便可以通过URL访问帖子,例如:http://www.example.com/buy-a-new-bike_Boston-MA-02111_2
相关的模型:
class ZipCode(models.Model):
zipcode = models.CharField(max_length=5)
city = models.CharField(max_length=64)
statecode = models.CharField(max_length=32)
class Need(models.Model):
title = models.CharField(max_length=50)
us_zip = models.CharField(max_length=5)
slug = ?????
def get_city():
zip = ZipCode.objects.get(zipcode=self.us_zip)
city = "%s, %s %s" % (zip.city, zip.statecode, zip.zipcode)
return city
一个样例ZipCode记录:
- zipcode = "02111"
- city = "Boston"
- statecode = "MA"
一个样例Need记录:
- title = "购买新自行车"
- us_zip = "02111"
- slug = "buy-a-new-bike_Boston-MA-02111_2" (期望的)
有什么提示可以创建这个唯一的slug吗?它的组成是:
- Need.title +“_”+ Need.get_city() +“_”+可选的递增整数,以使其唯一。所有空格都应替换为“ - ”。
注意:我上面期望的slug假定slug“buy-a-new-bike_Boston-MA-02111”已经存在,这就是为什么它在其后面添加“_2”以使其唯一的原因。
我尝试过django-extensions,但似乎它只能接受字段或字段元组来构建唯一的slug。我需要传递get_city()函数以及连接标题和城市之间的“_”。有人解决了这个问题并愿意分享吗?
谢谢!
更新
我已经在使用django-extensions的UUIDField,因此如果它也可用于其AutoSlugField,则非常不错!
save
而不使用信号? - art-solopov