2017-07-25 5 views
1
def clean_bank_account(self): 
    import ipdb; ipdb.set_trace() 
    ssn = self.form.cleaned_data.get('ssn') 
    customer = CustomerProfile.objects.filter(ssn=ssn) 

    bank_account = self.form.cleaned_data.get('bank_account') 
    bank = self.form.cleaned_data.get('bank') 
    bank_transit = self.form.cleaned_data.get('bank_transit') 
    qs = FinancialProfile.objects.filter(
     bank=bank, 
     bank_transit=bank_transit, 
     bank_account=bank_account) 

    if customer.count() == 1: 
     for cust in customer: 
      qs = qs.exclude(customer_id=cust.id) 
    if qs.count() > 0: 
     # The concatenation of bank transit, the bank account and the bank 
     # number must be unique. Hence, the following message would be 
     # displayed if it is already in use. 
     raise ValidationError(
      _('The bank, the bank transit and the bank are already in use.') 
     ) 

    if bank not in (None, ''): 
      # Check bank account format for specific banks 
      length = settings.LOANWOLF_BANK_ACCOUNTS_LENGTH.get(bank) 
      if length: 
       if bank_transit not in (None, ''): 
        if not bank_account.isnumeric() or length != len(bank_account): 
         raise ValidationError(
          _('Bank account number must contain %d digits') % length # noqa 
         ) 
       else: 
        raise ValidationError(
         _('Cannot validate bank account without a valid bank transit') # noqa 
        ) 
    return bank_account 

このコードの構造を改善したいと思います。私はCustomerProfile.objects.get(ssn=ssn)を実行できません。なぜなら、オブジェクトが存在しないとエラーになるからです。代わりに私はクエリーセットを返すフィルターを使ってリストを作成することに決めました。存在エラーの回避

if customer.count() == 1: 
     for cust in customer: 
      qs = qs.exclude(customer_id=cust.id) 

リストに顧客が1人しかいない場合は、顧客IDを除外します。最初は、forループを削除して顧客を使用することができると思っていましたが、それはクエリーセットなのでできません。コードのこの部分を改善する方法はありますか?

答えて

0

ループは、これは私がしたい正確に何であるinフィルタ

qs = qs.exclude(customer_id__in=[cust.id for cust in customer]) 
+0

に置き換えることができます。私はあなたの質問を受け入れます。質問:Djangoを何年もやっていますか?いつこのフレームワークに慣れ始めたのですか?あなたは何歳ですか? –

+0

質問に関連していないことを話したい場合は、チャットで話しましょう。https://chat.stackoverflow.com/rooms/150105/know-one –

+0

私の評価は十分ではありません。ちょうどそれに答えるとそれを5分後に削除することがあります –

関連する問題