2016-07-19 4 views
-2

파이썬 코드에서 2 개의 DateField 객체의 차이점을 얻고 그 차이를 기반으로 계산을 수행하려고합니다. 이 프로젝트에 플라스크를 사용하고 있으며 지금까지 다음 코드가 있습니다. 조회수 :파이썬에서 날짜의 두 datetime 필드의 차이를 얻으십시오.

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

그러나이 결과로 '없음'을 표시하지 않습니다.

이 구현의 형식은 다음과 같습니다

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

가 친절하게 내가 바로 일을하고 있지 않다 무엇을 강조 표시합니다.

+0

질문의 형식을 올바르게 지정할 수 있습니까? 코드를 읽을 수 없습니다 – SnoozeTime

+0

방금했습니다. 한번보세요. –

+1

없음을 표시하는 함수 호출은 무엇입니까? 최소한의 실제 예제를 제공 할 수 있습니까? 이렇게하면 일을 훨씬 쉽게 이해할 수 있습니다. – Ohumeronen

답변

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

당신은 문자열에 대해 정수를 비교하고, 그 True 수 없을 것입니다. 어떤 시점에서 이것은 의사 코드 였고이 비트를 변경하는 것을 잊었습니다. 또한 저는 or 연산자의 양쪽에서 동일한 비교를하고 싶지 않다고 추측합니다.

if loan.period < 7: 

'7 일 이상'부분도 동일하게 적용됩니다.

또 다른 내 생각에 귀하의 코드를 깨뜨리는 것은 이런 조건문이 모두 통과하지 않으며 항상 실행되어야하는 최소 코드가 실행되지 않는다는 것입니다.

관련 문제