以最简单的形式,TestAccount
public int theTimeMachineHours(EditText a, EditText b) throws Exception{
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("HH:mm");
Date startDate = simpleDateFormat.parse(a.getText().toString());
Date endDate = simpleDateFormat.parse(b.getText().toString());
long difference = endDate.getTime() - startDate.getTime();
if(difference<0)
{
Date dateMax = simpleDateFormat.parse("24:00");
Date dateMin = simpleDateFormat.parse("00:00");
difference=(dateMax.getTime() -startDate.getTime() )+(endDate.getTime()-dateMin.getTime());
}
int days = (int) (difference / (1000*60*60*24));
int hours = (int) ((difference - (1000*60*60*24*days)) / (1000*60*60));
int min = (int) (difference - (1000*60*60*24*days) - (1000*60*60*hours)) / (1000*60);
return hours;
}
但根据这个:https://docs.djangoproject.com/en/1.9/ref/models/instances/#updating-attributes-based-on-existing-fields它应该有用......
为什么F不被排除在验证之外我不知道。它应该是,Django应该只创建一个查询来更新它。
答案 0 :(得分:5)
这在纯Django中运行良好。在您的情况下,问题是您有helium.internal.signals
的监听器(pre_save
)尝试执行此操作:
def validate_model(sender, **kwargs):
if 'raw' in kwargs and not kwargs['raw']:
kwargs['instance'].full_clean()
Model.full_clean
期望模型中每个字段都有一堆值,但在这种情况下,您的某个字段不是值,而是CombinedExpression
尚未评估的字段,并且只会当Django写入数据库时得到评估。这会导致错误。
IMO您需要执行自己的验证,实现full_clean
的逻辑并处理Expression
,或者您需要从full_clean
中排除包含表达式的字段。