首页 文章

Django抽象父模型保存覆盖

提问于
浏览
7

我正在尝试在Django中编写一个抽象的父模型,这将帮助我从许多其他子模型的名称字段中创建一些slug字段 . 它使用反编码,适用于从西里尔字母到拉丁字母的透射形式 . 然后它使用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)

1 回答

  • 7

    好,我知道了 . 而不是使用 super(self.__class__, self).save(*args, **kwargs) .

    我需要 super(SlugModel, self).save(*args, **kwargs) .

    感谢辣椒种植者 .

相关问题