programing

관련 개체가 있는지 확인하는 장고 오류: RelatedObjectDesNotExist

testmans 2023. 9. 7. 21:34
반응형

관련 개체가 있는지 확인하는 장고 오류: RelatedObjectDesNotExist

방법이 있습니다.has_related_object관련 개체가 존재하는지 확인해야 하는 내 모델에서

class Business(base):
      name =  models.CharField(max_length=100, blank=True, null=True)

  def has_related_object(self):
        return (self.customers is not None) and (self.car is not None)


class Customer(base):
      name =  models.CharField(max_length=100, blank=True, null=True)
      person = models.OneToOneField('Business', related_name="customer")

하지만 오류가 납니다.

Business.has_related_object()

관련 개체가 존재하지 않음:거래처가 없습니다.

사용하다hasattr(self, 'customers')Django 문서에서 권장하는 예외 검사를 피하려면:

def has_related_object(self):
    return hasattr(self, 'customers') and self.car is not None

ORM이 데이터베이스로 가서 확인해야 하기 때문입니다.customer존재한다.존재하지 않기 때문에 예외가 발생합니다.

방법을 다음과 같이 변경해야 합니다.

def has_related_object(self):
    has_customer = False
    try:
        has_customer = (self.customers is not None)
    except Customer.DoesNotExist:
        pass
    return has_customer and (self.car is not None)

나는 그것의 상황을 모릅니다.self.car그래서 필요하다면 조정을 맡기겠습니다.

사이드 노트:만약 당신이 이것을 하고 있다면,Model그것은.ForeignKeyField아니면OneToOneField데이터베이스 쿼리를 피하기 위한 바로 가기로 다음 작업을 수행할 수 있습니다.

def has_business(self):
    return self.business_id is not None

오래된 질문이지만, 특히 OneToOne 관계를 확인하고 싶을 때 이런 유형의 예외를 처리하려는 사람에게 도움이 될 수 있다고 생각했습니다.

나의 해결책은ObjectDoesNotExist부터django.core.exceptions:

from django.core.exceptions import ObjectDoesNotExist

class Business(base):
      name =  models.CharField(max_length=100, blank=True, null=True)

    def has_related_object(self):
        try:
            self.customers
            self.car
            return True
        except ObjectDoesNotExist:
            return False


class Customer(base):
      name =  models.CharField(max_length=100, blank=True, null=True)
      person = models.OneToOneField('Business', related_name="customer")

디버그하는 동안 사용자를 생성했을 수도 있고 프로파일이 없기 때문에 지금 자동화를 코딩한 후에도 프로파일이 없습니다. signal.py 파일의 아래 코드를 시도한 다음 수퍼유저를 생성하고 수퍼유저로 로그인한 다음 첫 번째 계정의 프로파일을 추가합니다.그게 내겐 통했어요

@receiver(post_save, sender=User, dispatch_uid='save_new_user_profile')
def save_profile(sender, instance, created, **kwargs):
    user = instance
    if created:
        profile = UserProfile(user=user)
        profile.save()

언급URL : https://stackoverflow.com/questions/27064206/django-check-if-a-related-object-exists-error-relatedobjectdoesnotexist

반응형