在Python中以天为单位获取两个日期时间字段之间的差异

时间:2016-07-19 08:36:58

标签: python flask

我试图在我的python代码中获取2个DateField对象之间的区别,然后根据差异执行计算。 我正在为这个项目使用flask,到目前为止有以下代码。 的观点:

@admin.route('/approve/loan_payment/<id>', methods=['GET', 'POST'])
@login_required
def approve_loan_payment(id):
    if not current_user.is_admin:
        abort(403)
    loan = Loan.query.filter_by(id=id).first()
    if loan is None:
       abort(404)
    else:
       form = ApproveLoanPayment()
        if current_user.is_admin and form.validate_on_submit():
            loan.user.username = form.username.data
            loan.loan_amt = form.loan_amt.data
            loan.my_funds = form.my_funds.data
            loan.approved_on = form.approved_on.data
            loan.repaid_on = form.repaid_on.data
            loan.period = abs((loan.repaid_on - loan.approved_on).days)
loan.period = abs((loan.repaid_on - loan.approved_on).days)
        if loan.period == 'More than 7 days' or \
                loan.period == 'more than 7 days':
            if loan.maximum_charge > loan.my_funds:
                loan.balance = loan.maximum_charge - loan.my_funds
            else:
                loan.balance = loan.my_funds - loan.maximum_charge
                loan.extra = loan.balance
        if loan.period == 'Less than 7 days' or \
                loan.period == 'less than 7 days':
            if loan.minimum_charge > loan.my_funds:
                loan.balance = loan.minimum_charge - loan.my_funds
            else:
                loan.balance = loan.my_funds - loan.minimum_charge
                loan.extra = loan.balance
        loan.confirm_payment = True
        db.session.add(loan)
        db.session.commit()
        if loan.extra >= 0 or loan.balance == 0:
            loan.is_repaid_in_full = True
            loan.user.is_owing = False
            flash("The Loan has been repaid in full")
        if loan.balance > 0:
            loan.is_repaid_in_full = False
            loan.user.is_owing = True
            if loan.maximum_charge > loan.my_funds:
                updated_balance = loan.balance
                loan.maximum_charge = updated_balance
            elif loan.minimum_charge > loan.my_funds:
                updated_balance = loan.balance
                loan.minimum_charge = updated_balance

            flash("Loan payment approved."
                  "Loan balance is %s" % loan.balance)
            flash("The Loan has not yet been repaid in full")
        db.session.add(loan)
        db.session.commit()
        flash('The loan has been repaid')
        return redirect(url_for('admin.view_all_loans'))
    form.username.data = loan.user.username
    form.loan_amt.data = loan.loan_amt
    form.my_funds.data = loan.my_funds
    form.approved_on.data = loan.approved_on

    return render_template('admin/approve-loan-payment.html',
                           form=form, loan=loan)

然而,这显示了“没有”&#39;作为结果。

此实施的表格是:

class ApproveLoanPayment(Form):
    username = StringField('Username', validators=[
    Required(), Length(1, 64), Regexp('^[A-Za-z][A-Za-z0-9_.]*$', 0,
                                      'Usernames must have only letters, '
                                      'numbers, dots or underscores')])
    loan_amt = FloatField('Borrowed Amount')
    approved_on = DateField('Date Approved')
    repaid_on = DateField('Date Repaid', default=datetime.utcnow)
    period = IntegerField('Period Taken')
    my_funds = FloatField('Amount Paid')
    submit = SubmitField('Approve Loan')

请强调我做得不对。

1 个答案:

答案 0 :(得分:0)

if loan.period == 'Less than 7 days' or \
            loan.period == 'less than 7 days':

您正在将一个整数与一个字符串进行比较,该字符串永远不会是True。猜猜这是伪代码在某些时候,你忘了改变这些有意义的东西。另外,我猜你不想在or运营商的两边做同样的比较。

if loan.period < 7:

你在超过7天的时间内做了同样的事情。一部分。

我的另一个快速猜测是,破坏你的代码的是,这些条件都没有通过,并且永远不会执行应该始终执行的最少量代码。

相关问题