7

モデルバリデーター用に呼び出された検証クラスを使用するモデルCompareDatesがあり、バリデーターに2つのフィールド値を渡したい。ただし、バリデーターで複数のフィールド値を使用する方法がわかりません。

モデル全体を検証するために日付を比較できるようにしたいのですが、バリデーターに渡された値にキーワードを付けることができないようです。または何かが足りませんか?

from django.db import models
from myapp.models.validators.validatedates import CompareDates

class GetDates(models.Model):
    """
    Model stores two dates
    """
    date1 = models.DateField(
            validators = [CompareDates().validate])
    date2 = models.DateField(
            validators = [CompareDates().validate])
4

1 に答える 1

7

「通常の」バリデーターは、現在のフィールド値のみを取得します。したがって、それはあなたがやろうとしていることをしません。ただし、クリーンなメソッドを追加することはできます。必要に応じて、次のように保存メソッドを上書きします。

class GetDates(models.Model):
    date1 = models.DateField(validators = [CompareDates().validate])
    date2 = models.DateField(validators = [CompareDates().validate])
    def clean(self,*args,**kwargs):
        CompareDates().validate(self.date1,self.date2)
    def save(self,*args,**kwargs):
        # If you are working with modelforms, full_clean (and from there clean) will be called automatically. If you are not doing so and want to ensure validation before saving, uncomment the next line.
        #self.full_clean()
        super(GetDates,self).save(*args,**kwargs)
于 2012-09-28T11:37:11.213 に答える