Saya mencoba menulis model induk abstrak di Django yang akan membantu saya membuat beberapa bidang slug dari bidang nama untuk banyak model anak lainnya. Ia menggunakan pengkodean trans yang berfungsi sempurna untuk mentransliterasi huruf Sirilik ke huruf Latin. Kemudian menggunakan fungsi slugify dari Django untuk membuang sampah.
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
Masalahnya terjadi ketika saya mencoba menyimpan beberapa objek Foo: ini menyebabkan RuntimeError (kedalaman rekursi maksimum terlampaui). Apa yang saya lakukan salah? Bagaimana cara menulis super(self.__class__, self).save(*args, **kwargs)
dengan benar?