您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

python – Django不调用model clean方法

5b51 2022/1/14 8:22:54 python 字数 3457 阅读 596 来源 www.jb51.cc/python

我有一个视图,它从CSV文件创建模型.我已经将clean方法添加到模型类定义中,但是在创建模型时不会调用它. 以下是models.py的示例: class Run(models.Model): name = models.CharField(max_length=120) tested_build = models.ForeignKey('apps.Build') time

概述

以下是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方法.

class 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)

总结

以上是编程之家为你收集整理的python – Django不调用model clean方法全部内容,希望文章能够帮你解决python – Django不调用model clean方法所遇到的程序开发问题。


如果您也喜欢它,动动您的小指点个赞吧

除非注明,文章均由 laddyq.com 整理发布,欢迎转载。

转载请注明:
链接:http://laddyq.com
来源:laddyq.com
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


联系我
置顶