2012-11-18 39 views
3

我試着寫在Django一個抽象父模型,這將有助於我作出從領域許多其他兒童模特一些蛞蝓場。它使用trans編碼,它適用於將西裏爾字母轉換爲拉丁字母。然後它使用django的slugify函數來清除垃圾。Django的抽象父模型保存首要

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)

+4

看看這個問題(一個副本)的答案:http://stackoverflow.com/questions/10948132/abstract-inheritance-in-django-model-causing-max-recursion-depth-error – mjjohnson

回答

5

好的,我明白了。而不是使用super(self.__class__, self).save(*args, **kwargs)。我需要super(SlugModel, self).save(*args, **kwargs)

感謝peppergrower。