我創建了以下型號:Django模型和驗證程序
類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
之前,我添加了三個常量 '候選人', '審計' & '退休', 'STATUS_CHOICES'和另外三個字段; 'date_introduced','date_graduated'和'status'。一切工作正常。我有一個ModelForm,我可以用測試數據打開表單。當我在'reference_value'字段中輸入負值時,我根據我的驗證規則得到了適當的警告。
我添加上述,現在當我 'makemigrations',我得到:
ValueError異常:找不到在slide_library.models功能validate_positive。
對於我的生活,我不明白爲什麼它現在不會找到我的驗證器?
任何援助感激地收到。
剛上一個相關的說明,這不是很好的鍛鍊放太多邏輯/模型驗證。如果使用表單創建對象,只需將驗證添加到表單。 –