모델 관리자에게 객체를 요청하면 DoesNotExist
일치하는 객체가 없을 때 발생합니다.
go = Content.objects.get(name="baby")
대신에 DoesNotExist
, 내가 가지고 할 수있는 방법 go
이 될 None
대신?
답변
이를위한 ‘내장’방법은 없습니다. 장고는 매번 DoesNotExist 예외를 발생시킵니다. 파이썬에서 이것을 처리하는 관용적 인 방법은 그것을 시도 캐치로 감싸는 것입니다.
try:
go = SomeModel.objects.get(foo='bar')
except SomeModel.DoesNotExist:
go = None
내가 한 것은 모델을 서브 클래스하는 것입니다 .Manager, safe_get
위의 코드와 같은 코드를 만들고 해당 관리자를 사용하십시오. 그렇게하면 다음과 같이 쓸 수 있습니다 : SomeModel.objects.safe_get(foo='bar')
.
답변
답변
get()
DoesNotExist
주어진 매개 변수에 대해 개체를 찾을 수 없으면 예외 가 발생합니다. 이 예외는 모델 클래스의 속성이기도합니다.DoesNotExist
에서 예외 상속django.core.exceptions.ObjectDoesNotExist
예외를 잡아서 None
갈 수 있습니다.
from django.core.exceptions import ObjectDoesNotExist
try:
go = Content.objects.get(name="baby")
except ObjectDoesNotExist:
go = None
답변
이를위한 일반 함수를 만들 수 있습니다.
def get_or_none(classmodel, **kwargs):
try:
return classmodel.objects.get(**kwargs)
except classmodel.DoesNotExist:
return None
아래와 같이 사용하십시오 :
go = get_or_none(Content,name="baby")
일치하는 항목이 없으면 go는 None이되며 Content 항목을 반환합니다.
참고 : name = “baby”에 대해 둘 이상의 항목이 반환되면 MultipleObjectsReturned 예외가 발생합니다.
답변
이 방법으로 할 수 있습니다 :
go = Content.objects.filter(name="baby").first()
이제 go 변수는 원하는 객체이거나 None 일 수 있습니다.
참조 : https://docs.djangoproject.com/en/1.8/ref/models/querysets/#django.db.models.query.QuerySet.first
답변
일을 쉽게하기 위해 여기에 멋진 답변의 입력을 기반으로 작성한 코드 스 니펫이 있습니다.
class MyManager(models.Manager):
def get_or_none(self, **kwargs):
try:
return self.get(**kwargs)
except ObjectDoesNotExist:
return None
그런 다음 모델에서
class MyModel(models.Model):
objects = MyManager()
그게 다야. 이제 MyModel.objects.get () 및 MyModel.objetcs.get_or_none ()이 있습니다.
답변
exists
필터와 함께 사용할 수 있습니다 .
Content.objects.filter(name="baby").exists()
#returns False or True depending on if there is anything in the QS
존재하는지 알고 싶은 경우에 대한 대안