我不确定这是否是最好的方法,但我有一些表格发送的数据。我有ModelForm
获取该表单数据的request.POST
。正在发送的所有数据都是描述,金额和存款(布尔值)。
当此人提交数据时,金额将为正数,但如果存款为假,我希望将其作为负数存储在数据库中。
我想在模型或模型中进行此操作,并在保存之前进行一定量的按摩......所以,在其中一个类中的某个地方,我希望有类似的东西:
if not deposit:
amount = -amount
...然后保存。
有没有办法在ModelForm或Model中处理这个问题,这样我就不必在视图中做所有逻辑?
答案 0 :(得分:4)
ModelForm的save()方法是一个很好的地方:
class MyForm(models.ModelForm):
...
def save(self):
instance = super(MyForm, self).save(commit=False)
if not self.deposit:
self.amount = -self.amount
instance.save()
return instance
答案 1 :(得分:2)
覆盖模型保存方法是一种解决方案。但我首先要用干净的方法进行操作,并将其与业务规则混合使用:
models.py:
from django.db import models
class Issue(models.Model):
....
def clean(self):
rules.Issue_clean(self)
from issues import rules
rules.connect()
rules.py:
from issues.models import Issue
def connect():
from django.db.models.signals import post_save, pre_save, pre_delete
#issues
pre_delete.connect(Issue_pre_delete, sender= Incidencia)
pre_save.connect(Issue_pre_save, sender = Incidencia )
post_save.connect(Issue_post_save, sender = Incidencia )
def Incidencia_clean( instance ):
#pre save:
if not instance.deposit:
instance.amount *= -1
#business rules:
errors = {}
#dia i hora sempre informats
if not instance.account.enoughCredit:
errors.append( 'No enough money.' )
if len( errors ) > 0:
raise ValidationError(errors)
def Issue_pre_save(sender, instance, **kwargs):
instance.clean()
这样,规则被绑定到模型,您不需要在每个表单上编写此模型的代码(here, you can see this on more detail)