我创建了以下模型:
类SlideLibrary(models.Model):
CANDIDATE = 'Cand'
AUDIT = 'Audit'
RETIRED = 'Ret'
STATUS_CHOICES = (
(CANDIDATE,'Candidate'),
(AUDIT, 'Audit'),
(RETIRED, 'Retired'),
)
def validate_positive(value):
if value < 0:
raise ValidationError(u'%s must be a positive number' % value)
slide_name = models.CharField(max_length=6, primary_key=True)
reference_value = models.FloatField(default='0', validators=[validate_positive])
date_introduced = models.DateField(null=True, blank=True)
date_graduated = models.DateField(null=True, blank=True)
status = models.CharField(max_length=10, choices=STATUS_CHOICES,default='Candidate', blank=True)
last_mean = models.FloatField(default= '0')
esd = models.FloatField(default= '0')
criteria = models.CharField(max_length= 10)
def save(self, *args, **kwargs):
val = getattr(self, 'slide_name', False)
if val:
setattr(self, 'slide_name', val.upper())
self.esd = self.calculate_esd()
super(SlideLibrary,self).save(*args, **kwargs)
def calculate_esd(self):
from math import sqrt
if self.reference_value:
try:
return sqrt((self.reference_value-0.04) * self.reference_value**2)
except ValueError:
return 0
else:
return 0
def __unicode__(self):
return self.slide_name
在我添加三个常数'候选','审核'和&amp; 'RETIRED','STATUS_CHOICES'和另外三个领域; 'date_introduced','date_graduated'和'status'。一切都很好。我有一个ModelForm,我可以用测试数据打开表单。当我在'reference_value'字段中输入负值时,我根据验证规则得到了相应的警告。
我添加了上面的内容,现在当我'makemigrations'时,我得到了:
ValueError:无法在slide_library.models中找到函数validate_positive。
对于我的生活,我不明白为什么它现在找不到我的验证器?
感激不尽的任何帮助。
答案 0 :(得分:1)
您必须将您的功能validate_positive
从您的班级SlideLibrary
中删除。
例如:
def validate_positive(value):
if value < 0:
raise ValidationError(u'%s must be a positive number' % value)
class SlideLibrary(models.Model):
reference_value = models.FloatField(default=0, validators=[validate_positive])
你又犯了一个错误:你正在设置 FloatField 然后使用default=0
而不是default='0'