2016-04-04 7 views
1

私は、Djangoのモデル、のようなものがあります:私の問題は、この現在のアプローチは、すべてのフィールドをきれいにということですDjango:特定のモデルフィールドのみをクリーニングしますか?

@receiver(pre_save, sender=MyModel)           
def run_full_clean(sender, instance, **kwargs):         
    instance.clean_fields() 

:私も同じような何かを行く前セーブフックを持って

class MyModel(models.Model): 
    no_validation = models.PositiveIntegerField(null=True, db_index=True) 
    yes_validation = models.CharField(max_length=254, validators=[my_validator]) 

を。 1つの特定のフィールド(yes_validationと呼ばれるフィールド)だけをきれいにしたい。それを行う簡単な方法はありますか?

私はexcludeパラメータしか認識していませんが、私のクラスはほぼ100の異なるフィールドを持っているので、すべてのフィールドを除外するのはちょっと面倒です。

答えて

2

clean_fieldsメソッドを使用する代わりにcleanメソッドをオーバーライドできます。 django docsから引用:

Model.clean()

このメソッドは、カスタムモデルに 検証を提供するために、必要に応じてモデルの属性を変更するために使用されるべきです。 インスタンスの場合は、 フィールドの値を自動的に入力するか、2つ以上の フィールドにアクセスする必要がある検証を行うことができます。

モデルのデータの検証を実際にサポートしていないため、この検証方法についてはわかりません。私のモデルは、データを定義するデータベーススキーマだけです。入力ソースのデータを検証するために最善を尽くしてください。ほとんどの場合、よく使用されるのはFormです。 Djangoフォームは、データを確認するための非常に良いAPIを持っているので、私はpre_saveシグナルを使用する代わりにそれに時間を費やすことをお勧めします。そうすれば、デバッグも非常に簡単になります。

関連する問題