翻訳可能なスラッグフィールドを持つモデルがあり、すべてのモデルで次のような操作を行うための同じコードを書いています。
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)
これは適切な方法ですか?