【发布时间】:2012-11-06 15:10:45
【问题描述】:
我正在尝试在 Django 中编写一个抽象父模型,这将帮助我从 name 字段中为许多其他子模型创建一些 slug 字段。它使用 trans 编码,非常适合将西里尔字母转写为拉丁字母。然后它使用 django 的 slugify 函数来清除垃圾。
class SlugModel(models.Model):
class Meta:
abstract = True
name = models.CharField(max_length=128, default=u'')
slug = models.CharField(max_length=128,blank=True)
def save(self, *args, **kwargs):
if not self.slug:
slug = slugify(unicode(self.name).encode('trans'))
else:
slug = self.slug
count = self.__class__.objects.filter(slug = slug).count()
if count > 1:
if slug[-2]=='_':
count = int(slug[-1])
slug = slug[:-2]
self.slug = '{0}_{1}'.format(slug,count+1)
else:
self.slug = slug
super(self.__class__, self).save(*args, **kwargs)
def __unicode__(self):
return self.name
class Foo(SlugModel):
pass
当我试图保存一些 Foo 对象时会出现问题:它会导致 RuntimeError(超出最大递归深度)。我究竟做错了什么?如何正确书写super(self.__class__, self).save(*args, **kwargs)?
【问题讨论】:
-
查看这个问题(重复)以获得答案:stackoverflow.com/questions/10948132/…
-
那个帖子没有好的答案。
标签: django django-models slug