2

Djangoには、いくつかの共通フィールドを持つ親抽象クラスと、さらにフィールドを追加するいくつかのサブクラスがあります。これらのサブクラスのいくつかでは、親クラスのフィールドを検証するカスタムバリデーターを追加したいと思います。

class Template(models.Model):
  text = models.CharField(max_length=200)

class GlobalTemplate(Template):
  function = models.ManyToManyField(Function, null=True, blank=True)

次のように、親クラスのフィールドに簡単に追加できます。

class Template(models.Model):
  text = models.CharField(max_length=200, validators=[validate_custom])

ただし、この場合、バリデーターを子クラスGlobalTemplateに追加しますが、テキストフィールドにアタッチします。

これはDjangoで可能ですか?

ありがとう!

4

1 に答える 1

3

フィールドバリデーターはfield.validatorsリストに格納されているので、基本的にそこにバリデーターを追加する必要があります。

_metaフィールドインスタンスにアクセスするには、オブジェクトの属性で少し遊ぶ必要があります(この属性で遊ぶことは想定されていないため、djangoを更新するときは、オブジェクトが持っていることを確認する必要があります。変更されていません)。これがあなたがそれをすることができる方法です:

def get_fields_dict(self):
    return dict((field.name, field) for field in self._meta.fields)

def __init__(self, *args, **kwargs):
    super(GlobalTeplate, self).__init__(*args, **kwargs)
    text_field = self.get_fields_dict()['text']
    text_field.validators.append(validate_custom)
于 2012-05-27T21:00:50.993 に答える