Python Django can';我看不到我的验证器

Python Django can';我看不到我的验证器,python,django,validation,Python,Django,Validation,我想使用我自己定制的验证器。问题是,Django看不到验证器 models.py: class Market(models.Model): money = models.DecimalField(max_digits = 15, decimal_places=2, validators=[moneyValidator]) D = decimal.Decimal def moneyValidator(x): if not convStr(x): raise Va

我想使用我自己定制的验证器。问题是,Django看不到验证器

models.py:

class Market(models.Model):
    money = models.DecimalField(max_digits = 15, decimal_places=2, validators=[moneyValidator])

D = decimal.Decimal

def moneyValidator(x):
    if not convStr(x):
        raise ValidationError
    if (x <= 0) or (x >= PAYOFF) or (D(str(x))%D('0.01') != 0):
        raise ValidationError

def convStr(x):
    try:
        str(x)
        return True
    except ValueError:
        return False

我认为现在的情况是Django从任何地方调用这个函数,但不知道在哪里查找函数。对此我能做些什么?

应该在类声明之前声明方法
moneyValidator

def moneyValidator(x):
    ...

class Market(models.Model):
    money = models.DecimalField(max_digits = 15, decimal_places=2, validators=[moneyValidator])

看起来Python实际上关心它。@oneloop:函数中的全局名称在函数被调用之前不会被查找,这就是为什么以后可以定义其他函数的原因。但是一个类定义会在那里执行,并且像验证器这样的名称必须在那时可用。
def moneyValidator(x):
    ...

class Market(models.Model):
    money = models.DecimalField(max_digits = 15, decimal_places=2, validators=[moneyValidator])