python – Django不调用model clean方法
发布时间:2020-12-30 15:42:45 所属栏目:Python 来源:互联网
导读:我有一个视图,它从CSV文件创建模型.我已经将clean方法添加到模型类定义中,但是在创建模型时不会调用它. 以下是models.py的示例: class Run(models.Model): name = models.CharField(max_length=120) tested_build = models.ForeignKey(apps.Build) time
|
我有一个视图,它从CSV文件创建模型.我已经将clean方法添加到模型类定义中,但是在创建模型时不会调用它. 以下是models.py的示例: class Run(models.Model):
name = models.CharField(max_length=120)
tested_build = models.ForeignKey('apps.Build')
timestamp_start = models.DateTimeField()
timestamp_end = models.DateTimeField()
class CommonMeasurement(models.Model):
timestamp = models.DateTimeField()
value = models.FloatField()
run = models.ForeignKey(Run)
def clean(self):
super(CommonMeasurement,self).clean()
print 'here we go'
if self.timestamp < self.run.timestamp_start or self.timestamp > self.run.timestamp_end:
raise django_excetions.ValidationError('Measurement is outside the run')
class ClientMeasurement(CommonMeasurement):
metric = models.ForeignKey(ClientMetric)
account = models.CharField(max_length=120,blank=True)
这是我的表单视图代码示例: class BaseMeasurementsUpload(generic_views.FormView):
template_name = 'upload.html'
models_to_upload = None
def get_success_url(self):
return self.request.get_full_path()
def form_valid(self,form):
uploader = getattr(importers,form.cleaned_data['uploader'])
try:
the_uploader = uploader(form.cleaned_data,self.models_to_upload)
upload_results = the_uploader.get_result_info()
except django_exceptions.ValidationError as e:
custom_errors = e
return render_to_response(self.template_name,{'upload_results': upload_results,'custom_errors': custom_errors},context_instance=RequestContext(self.request))
class ClientMeasurementsUploadView(BaseMeasurementsUpload):
form_class = forms.ClientMeasurementsUploadForm
models_to_upload = models.ClientMeasurement
def get_form(self,form_class):
uploaders = (('MeasurementsSimpleCsv',importers.MeasurementsSimpleCsv.__doc__),('ClientMeasurementsBulkCsv',importers.ClientMeasurementsBulkCsv.__doc__,))
if self.request.POST:
# get bound form
return self.form_class(uploaders,self.request.POST,self.request.FILES)
else:
return forms.ClientMeasurementsUploadForm(uploaders)
进口商为每个型号执行实际验证和调用create方法. 解决方法要调用模型clean方法,我们将重写save方法.检查链接: https://docs.djangoproject.com/en/dev/ref/models/instances/#django.db.models.Model.cleanclass CommonMeasurement(models.Model):
timestamp = models.DateTimeField()
value = models.FloatField()
run = models.ForeignKey(Run)
def clean(self):
if self.timestamp < self.run.timestamp_start or self.timestamp > self.run.timestamp_end:
raise django_excetions.ValidationError('Measurement is outside the run')
def save(self,*args,**kwargs):
self.full_clean()
return super(CommonMeasurement,self).save(*args,**kwargs) (编辑:哈尔滨站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
