2010-04-22 18 views
55

Django में के लिए मौजूद है की जाँच करने के लिए कैसे किसी भी प्रविष्टि एक प्रश्नDjango जांच एक प्रश्न

sc=scorm.objects.filter(Header__id=qp.id) 

यह है कि यह कैसे php

if(mysql_num_rows($resultn)) { 
    // True condition 
    } 
else { 
    // False condition 
    } 
+0

की [क्या एक वस्तु 404 लौटाने के बिना एक Django दृश्य में मौजूद रहने पर मान्य करने के लिए सही तरीका है संभावित डुप्लिकेट? ] (http://stackoverflow.com/questions/639836/what-is-the-right-way-to- validate-if-an-object-exists-in-a-django-view-without-r) – Wtower

उत्तर

48

उपयोग count() में किया गया था था के लिए मौजूद है या नहीं:

sc=scorm.objects.filter(Header__id=qp.id) 

if sc.count() > 0: 
    ... 

उदाहरण पर लाभ len(), है कि क्वेरीसमूह अभी तक मूल्यांकन नहीं किया गया है:

count() पर्दे के पीछे एक SELECT COUNT(*) करता है, ताकि आप हमेशा नहीं बल्कि अजगर वस्तुओं में रिकॉर्ड के सभी लोड हो रहा है और परिणाम पर len() बुला से count() उपयोग करना चाहिए।

यह ध्यान में रखते हुए, When QuerySets are evaluated पढ़ने योग्य हो सकता है।


यदि आप get() का उपयोग करते हैं, उदा। scorm.objects.get(pk=someid), और वस्तु मौजूद नहीं है, एक ObjectDoesNotExist अपवाद उठाया है:

from django.core.exceptions import ObjectDoesNotExist 
try: 
    sc = scorm.objects.get(pk=someid) 
except ObjectDoesNotExist: 
    print ... 

अद्यतन: यह भी संभव है exists() उपयोग करने के लिए:

if scorm.objects.filter(Header__id=qp.id).exists(): 
    .... 

रिटर्न True अगर क्वेरीसमूह किसी भी शामिल परिणाम, और False यदि नहीं। यह क्वेरी को सबसे आसान और तेज़ तरीके से में करने की कोशिश करता है, लेकिन यह सामान्य क्वेरीसेट क्वेरी के समान क्वेरी को निष्पादित करता है।

+0

धन्यवाद बहुत ..................... – Hulk

+42

'अगर scorm.objects.filter (header__id = qp.id) .exists()' –

+0

@Alex लेबेडेव: हाँ, यह विधि Django 1.2 में उपलब्ध होगी। धन्यवाद। –

112

Django 1.2 के रूप में, आप exists() उपयोग कर सकते हैं:

https://docs.djangoproject.com/en/dev/ref/models/querysets/#exists

if some_queryset.filter(pk=entity_id).exists(): 
    print("Entry contained in queryset") 
+12

यह स्वीकार्य उत्तर होना चाहिए। मौजूद है() आमतौर पर गिनती() से काफी तेज है। – frmdstryr

संबंधित मुद्दे