モデルのclean()
メソッドと基本的なフィールド検証に問題があります。これが私のモデルとclean()
方法です。
class Trial(models.Model):
trial_start = DurationField()
movement_start = DurationField()
trial_stop = DurationField()
def clean(self):
from django.core.exceptions import ValidationError
if not (self.movement_start >= self.trial_start):
raise ValidationError('movement start must be >= trial start')
if not (self.trial_stop >= self.movement_start):
raise ValidationError('trial stop must be >= movement start')
if not (self.trial_stop > self.trial_start):
raise ValidationError('trial stop must be > trial start')
私のclean()
メソッドは、特定の値が正しい範囲内にあるかどうかをチェックします。ユーザーがフィールドへの入力を忘れた場合 (例: movement_start
)、エラーが発生します。
can't compare datetime.timedelta to NoneType
元の関数がその欠落しているエントリをキャッチする必要があるため、このエラーが発生することに驚いていますclean()
(結局のところ、これmovement_start
は必須フィールドです)。では、欠損値の基本的なチェックと、値が特定の範囲内にあるかどうかのカスタム チェックを行うにはどうすればよいでしょうか。これはモデルのclean()
メソッドで実行できますか、または使用する必要がありますForms
か?
より明確にするための EDIT1:とはtrial_start
すべて必須フィールドです。最初に 3 つのフィールドすべてが入力されていることを確認し、次に値が特定の範囲内にあるかどうかを確認するメソッドを作成する必要があります。movement_start
trial_stop
clean()
たとえば、次のコードはtrial_start
空である可能性があるため、機能しません。各フィールドの存在を確認する必要がないようにしたいのですが、django がそれを行う必要があります。
class TrialForm(ModelForm):
class Meta:
model = Trial
def clean_movement_start(self):
movement_start = self.cleaned_data["movement_start"]
trial_start = self.cleaned_data["trial_start"]
if not (movement_start >= trial_start):
raise forms.ValidationError('movement start must be >= trial start')
return self.cleaned_data["movement_start"]
EDIT2 このチェックをモデルのメソッドに追加したかった理由clean()
は、Python シェルで作成されたオブジェクトが正しい値を自動的にチェックするためです。ビューにはフォームで問題ありませんが、シェルにも値チェックが必要です。