문제

나는 try를 사용하는 것이 나쁜 스타일이라고 생각합니다.제외하고:흐름 제어를 위한 것이지만 Django에 DB 필드가 있는지 테스트하기 위해 다음 코드를 작성하는 방법을 알 수 없습니다.이것은 작동하는 "더티" 코드입니다:

@receiver(pre_save, sender=UserProfile)
def create_user_profile(sender, instance=None, **kwargs):

    try:
        print str(instance.bank_account)
    except:
        print 'No account'

차라리 이런 일을 하고 싶지만 다음과 같은 경우에는 예외가 발생합니다. if 문이 실행되고 개체가 존재하지 않습니다.

@receiver(pre_save, sender=UserProfile)
def create_user_profile(sender, instance=None, **kwargs):

    if instance.bank_account is None:
        print 'No account'
    else:
        print str(instance.bank_account)
도움이 되었습니까?

해결책

나는 당신이 BankAccount.DoesNotExist 오류?그렇다면 두 사람의 관계를 역전시킬 수 있다. UserProfile 그리고 BankAccount.보세요 장고 티켓 #10227 여기서 무슨 일이 일어나고 있는지 알아보기 위해.

즉, 귀하의 코드로 작업해야 한다면 명시적인 코드를 보고 싶습니다. try...except 해결 방법이 실제로 의미가 없는 한 해결 방법 대신.

다른 팁

나는 당신의 첫번째의 첫 번째 예를 훨씬 선호하지만, 아마도 hasattr(instance,'bank_account')를 보호 장치로 사용할 수 있습니까?

우선 첫 번째 예는 이 작업을 수행하는 데 선호되는 방법입니다(단, 이 작업에 대해 예상되는 예외만 제외하고 범위를 좁힐 수도 있음).

나는 당신의 if 문이 다음과 같이 폭발할 것이라고 상상합니다. instance is None;해결책은 if 문에 테스트를 추가하여 테스트하는 것입니다. instance 첫 번째:

if instance and instance.bank_account:
    print str(instance.bank_account)
else: print 'No account'

필드가 존재하는지 모르는 경우 바꿀 수 있습니다. instance.bank_account ~와 함께 getattr(instance, 'bank_account', None), 둘 다 값을 검색하고 속성이 존재하지 않을 가능성을 처리합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top