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ループを削除して顧客を使用することができると思っていましたが、それはクエリーセットなのでできません。コードのこの部分を改善する方法はありますか?
に置き換えることができます。私はあなたの質問を受け入れます。質問:Djangoを何年もやっていますか?いつこのフレームワークに慣れ始めたのですか?あなたは何歳ですか? –
質問に関連していないことを話したい場合は、チャットで話しましょう。https://chat.stackoverflow.com/rooms/150105/know-one –
私の評価は十分ではありません。ちょうどそれに答えるとそれを5分後に削除することがあります –