2012-06-14 3 views
3

데이터가 있는지 확인하는 "방법"인 django를 사용하고 있습니까?데이터가 장고에 있는지 확인하는 가장 좋은 방법은 무엇입니까?

나는 내가 GET에 try/catch 블록을 가지고, 또는 필터에 len의 크기를 확인 할 수 있습니다 알고

try: 
    DemoModel.objects.get(id=8) 
catch DoesNotExist: 
    catch stuff here 

또는

if not len(DemoModel.objects.filter(id=8): 
    do stuff here 

전 "최선"을

으로 정의한다고 가정합니다. 표준 방식 b. 보다 효율적인 방법

또는 실제 차이가 있습니까? 아니면 비 당파적인 세 번째 방법이 있습니까?

+3

그것은 DemoModel.objects.filter (식 8) .exists이어야한다(). – dannyroa

+0

owza. 고마워. 그걸 내게 upvote/accept에 대한 대답으로 두는 마음? – bharal

답변

7

개체를 사용해야하는 경우 try/catch를 사용하십시오.

try: 
    object = DemoModel.objects.get(id=8) 
    #use object here 
catch DoesNotExist: 
    #catch stuff here 

필요없는 경우 exists()를 사용하십시오.

if DemoModel.objects.filter(id=8).exists(): 
    #do stuff here 
0

DemoModel.objects.filter (id = blah blah blah) .exists()라고 말할 수 있습니다. try/catch 패턴도 적절하게 작동합니다. 실제로 객체가 존재할 것으로 예상되는 지점을 만들고 싶다면 try/catch를 사용하고 객체가 없을 때 .exists() 절을 사용할 수 있습니다. 기존의 비즈니스 =)

0

아래 코드 죄송합니다. "데이터가 있는지 알려주십시오."라는 주제로 유용 할 수 있습니다. :) 템플릿에 대한 적절한 방법은 그렇지 않으면 내 api 예제/문서 링크가 특정 저장된 모델 인스턴스의 존재를 확인하는 방법에 대한 질문에 대답해야합니다.

{% for DemoModel in object_list %} 
{% ifchanged %} 
do something 
{% else %} 
do something else 
{% endif %} 

장고 문서에서 Retrievieng Objects 사용하고 체인 필터 :

>>> Entry.objects.filter(
...  headline__startswith='What' 
...).exclude(
...  pub_date__gte=datetime.now() 
...).filter(
...  pub_date__gte=datetime(2005, 1, 1) 
...) 

내가 관리자로 당신에 대해 얘기했다 생각 죄송합니다. 분명히 API를 통한 것입니다. 미안해, 너가 새롭고 필요하지 않을 때 템플릿 구문을 사용하고 있다고 생각했다. 그러나 이상적인 상황은 DemoModel이 True이거나 DemoModel이 false 인 모델 인스턴스에있을 수있는 경우입니다. 그렇게하면 매번 호출하고 올바르게 호출됩니다. 이상적인 경우에 당신은 DemoModel이 참 또는 거짓 오히려 알고있는 모델 인스턴스에 있고 당신은 단순히 뭔가를 할

{== 진정한 %가 DemoModel 경우 %} {%의 ENDIF의 %를}

은 가정 DemoModel이있다 할 수 부울 필드가 아닌 경우이를 감쌀 수 있습니다. 또한 위에있는 API는 템플릿 태그 필터를 사용하여 적용 할 수 있습니다.

0

if DemoModel.objects.filter(id=8).count():

관련 문제