Django स्वचालित रूप से प्राथमिक कुंजी के रूप में एक आईडी फ़ील्ड बनाता है।
अब मुझे इस आईडी द्वारा वस्तु प्राप्त करने की आवश्यकता है।
object = Class.objects.filter()
इस फ़िल्टर को कैसे लिखें?
Django स्वचालित रूप से प्राथमिक कुंजी के रूप में एक आईडी फ़ील्ड बनाता है।
अब मुझे इस आईडी द्वारा वस्तु प्राप्त करने की आवश्यकता है।
object = Class.objects.filter()
इस फ़िल्टर को कैसे लिखें?
जवाबों:
यदि आप एक वस्तु प्राप्त करना चाहते हैं, तो उपयोग get()
करना अधिक सरल है:
obj = Class.objects.get(pk=this_object_id)
id
एक अंतर्निहित फ़ंक्शन में जो किसी ऑब्जेक्ट की पहचान लौटाता है। बहुमत के मामलों में चीजों को संदर्भित id
करने से सही काम होगा जैसे Class.objects.get(id=this_object_id)
काम। लेकिन मुझे लगता है पर विचार करने के लिए कुछ है।
मैं एक ही समस्या के लिए यहाँ आया था, लेकिन एक अलग कारण के लिए:
Class.objects.get(id=1)
यह कोड एक ImportError अपवाद को बढ़ा रहा था। जो मुझे भ्रमित कर रहा था वह यह था कि नीचे दिया गया कोड ठीक निष्पादित किया गया था और उम्मीद के मुताबिक परिणाम दिया गया था:
Class.objects.all()
get()
विधि के लिए ट्रेसबैक की पूंछ :
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 का उपयोग कर रहा हूं, इसलिए नाम स्थान को प्रतिबिंबित करना पड़ा।
आप उपयोग कर सकते हैं:
objects_all=Class.objects.filter(filter_condition="")
यह एक क्वेरी सेट लौटा देगा भले ही वह एक वस्तु प्राप्त करे। यदि आपको वास्तव में एक वस्तु के उपयोग की आवश्यकता है:
obj=Class.objects.get(conditon="")
आप get_object_or_404 django शॉर्टकट का भी उपयोग कर सकते हैं । यदि ऑब्जेक्ट नहीं मिलता है तो यह 404 त्रुटि उठाता है।
pk
किसी भी मॉडल के लिए प्राथमिक कुंजी को संदर्भित करने का पसंदीदा तरीका है।id
क्षेत्र केवल तभी मॉडल लेखक विशेष रूप से एक प्राथमिक कुंजी को नामित नहीं करता है उत्पन्न होता है। यदि लेखक ने एक प्राथमिक कुंजी फ़ील्ड निर्दिष्ट किया है जिसका नाम नहीं हैid
, तो कोईid
फ़ील्ड नहीं होगा ।