2010-11-29 17 views
53

Django स्वचालित रूप से प्राथमिक कुंजी के रूप में एक आईडी फ़ील्ड बनाता है।Django डेटाबेस क्वेरी: आईडी द्वारा ऑब्जेक्ट कैसे प्राप्त करें?

अब मुझे इस आईडी द्वारा ऑब्जेक्ट प्राप्त करने की आवश्यकता है।

object = Class.objects.filter() 

इस फ़िल्टर को कैसे लिखें?

उत्तर

92

आप एक वस्तु प्राप्त करना चाहते हैं, get() का उपयोग कर अधिक स्पष्ट है:

obj = Class.objects.get(pk=this_object_id) 
+9

एफवाईआई, 'पीके' किसी भी मॉडल के लिए प्राथमिक कुंजी को संदर्भित करने का पसंदीदा तरीका है। 'Id' फ़ील्ड केवल तभी उत्पन्न होता है जब मॉडल लेखक विशेष रूप से प्राथमिक कुंजी निर्दिष्ट नहीं करता है। अगर लेखक * ने प्राथमिक कुंजी फ़ील्ड निर्दिष्ट की है जिसे 'आईडी' नाम नहीं दिया गया है, तो वहां' आईडी' फ़ील्ड नहीं होगा। –

+0

एफआईआई, 'आईडी' एक अंतर्निर्मित फ़ंक्शन में जो किसी ऑब्जेक्ट की पहचान देता है। 'आईडी' द्वारा चीजों को संदर्भित करने वाले अधिकांश मामलों में सही चीज़ होगी। 'Class.objects.get (id = this_object_id) 'काम। लेकिन मुझे लगता है कि यह अनुमान लगाने के लिए कुछ है। – Tom

9

मैं यहाँ एक ही समस्या के लिए मिल गया है, लेकिन एक अलग कारण के लिए:

Class.objects.get(id=1) 

इस कोड को ऊपर उठाने गया था एक आयात त्रुटि अपवाद। get() विधि के लिए ट्रैस बैक की

Class.objects.all() 

पूंछ:

File "django/db/models/loading.py", line 197, in get_models 
    self._populate() 
File "django/db/models/loading.py", line 72, in _populate 
    self.load_app(app_name, True) 
File "django/db/models/loading.py", line 94, in load_app 
    app_module = import_module(app_name) 
File "django/utils/importlib.py", line 35, in import_module 
    __import__(name) 
ImportError: No module named myapp 

Django के loading.py अंदर कोड पढ़ना, मैं क्या मुझे भ्रामक था कि कोड के नीचे ठीक निष्पादित और एक परिणाम के सेट की उम्मीद के रूप में लौटा था इस निष्कर्ष पर आया कि मेरे settings.py में मेरे ऐप का एक बुरा रास्ता था जिसमें मेरी Class मॉडल परिभाषा शामिल है। मुझे बस इतना करना था कि ऐप के पथ और get() विधि को ठीक किया गया था।

यहाँ है मेरे को सही पथ के साथ settings.py:

INSTALLED_APPS = (
    'django.contrib.contenttypes', 
    'django.contrib.sessions', 
    'django.contrib.sites', 
    # ... 
    'mywebproject.myapp', 

)

क्योंकि मैं एक स्टैंडअलोन के रूप में Django के ORM उपयोग कर रहा हूँ सभी भ्रम उत्पन्न कर दिया गया था, इसलिए नाम स्थान कि प्रतिबिंबित करने के लिए किया था।

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

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