2 人の子供に継承される抽象モデルがあります。子では、バリデーターを設定しています。コードを実行すると、両方の子がバリデータを持っていることがわかります。
擬似コードは次のとおりです。
class myAbstract(models.Model):
Intro = models.TextField(blank=True, null=True, )
class Meta:
abstract = True
class child1(myAbstract):
class Meta:
verbose_name = 'child 1'
class child2(myAbstract):
def __init__(self, *args, **kwargs):
super(child2, self).__init__(*args, **kwargs)
intro = self._meta.get_field('Intro')
intro.validators.append(MaxLengthValidator(60))
class Meta:
verbose_name = 'child 2'
管理者で、child1 を追加してから child2 を追加すると、バリデーターが child2 に対して開始され、文字数が制限されます。child2 から始めると、child2 はバリデーターを取得しません。
これは予想される動作ですか?もしあれば、これをコーディングするための提案された方法は何ですか? Intro を子クラスに移動することを考えました。
解決済み: Alasdair が指摘したように、バリデータはクラス変数であるため、これは予期される動作です。
Intro フィールドを子に移動しようとしましたが、うまくいきませんでした。私はこのソリューションを使用しました:モデルフォームにforms.CharFieldを設定する
https://stackoverflow.com/a/3209550/757955 。