0

翻訳可能なスラッグフィールドを持つモデルがあり、すべてのモデルで次のような操作を行うための同じコードを書いています。

def save(self, *args, **kwargs):
        for lang_code, lang_verbose in settings.LANGUAGES:
           if hasattr(self, 'slug_%s' % lang_code) and hasattr(self, 'name_%s' % lang_code):
                trans = getattr(self, 'name_%s' % lang_code, u"")
                if not trans:
                    trans = self.name_en 
                setattr(self, 'slug_%s' % lang_code, slugify(trans))
         super(Model, self).save(*args, **kwargs)

これらのモデルで同じコードを取り除こうとしています。抽象的で、models.Model から継承する親クラスを使用することを考えています。そして私は書いた:

class ModelSluggable(models.Model):
    #I also need to pass the fromField parameter to the parent class from child
    def __init__(self, fromField): 
        super(SlugWithTrans,self).__init__(fromField)   

    slug = models.SlugField(editable=False, max_length=200, db_index=True)

    class Meta:
        abstract = True

    def save(self, *args, **kwargs):
        for lang_code, lang_verbose in settings.LANGUAGES:
           if hasattr(self, 'slug_%s' % lang_code) and hasattr(self, 'name_%s' % lang_code):
                trans = getattr(self, 'name_%s' % lang_code, u"")
                if not trans:
                    trans = self.name_en 
                setattr(self, 'slug_%s' % lang_code, slugify(trans))
        super(SlugWithTrans, self).save(*args, **kwargs)

これは適切な方法ですか?

4

0 に答える 0