我正在通过xlrd读取Excel报告,然后通过django-report-tools创建用于批量导入的Tablib数据集。我当前的Model有一堆自定义方法,它们将保存到db的值取出,然后执行其他逻辑。
目前,模型已设置为镜像excel报告/源系统的结构,以便于导入。我现在意识到这需要我创建一堆自定义模型方法,以便我可以将我真正关心的数据返回到我的应用程序中。例如,源数据具有到期日和修订的到期日。我只对“实际到期日”感兴趣,所以我有一个方法可以回吐适当的日期。 (这只是一个例子,有很多不同的情况需要类似的卫生)。
这显然导致了我的数据库中出现了大量不必要的数据,所以我要将模型重新修改为更精确。
是否可以将单个记录的所有报告值传递到Model.save()方法中,然后在那里执行清理?我将交出一些不会保存到数据库的变量。如果是这样,你可以指出我正确的方向,因为我的谷歌搜索是空的。 Django Docs让我觉得这对我正在运行的批量作业是不可能的。但如果我不批量导入,这甚至可能吗?
或者,对我来说,更好的做法是重做导入作业以进行这些计算,然后将ORM交给原始数据集?感谢您提供的任何帮助。
**我在Python 2.7上运行Django 1.6。
答案 0 :(得分:0)
可以在save方法中执行此操作,但使用ModelForm似乎更适合这种情况。像这样:
# models.py
class MyModel(models.Model):
extracted_data_1 = models.IntegerField()
# more fields
...
# forms.py
class MyModelForm(forms.ModelForm):
cell_a = forms.IntegerField()
cell_b = forms.IntegerField(required=False)
def clean(self):
cell_a = self.cleaned_data['cell_a']
cell_b = self.cleaned_data.get('cell_b', 0)
self.cleaned_data['extracted_data_1'] = cell_a + cell_b
return self.cleaned_data
class Meta:
model = MyModel
fields = ('cell_a', 'cell_b', 'extracted_data_1')
每个excel行都必须由表单处理,如果它有效,只需执行form.save()
。