জ্যাঙ্গো ডাটাবেস ক্যোয়ারী: আইডি দিয়ে কীভাবে বস্তু পাবেন?


105

জ্যাঙ্গো স্বয়ংক্রিয়ভাবে প্রাথমিক কী হিসাবে একটি আইডি ক্ষেত্র তৈরি করে।

এখন এই আইডি দিয়ে আমার অবজেক্টটি নেওয়া উচিত।

object = Class.objects.filter() 

এই ফিল্টারটি কীভাবে লিখবেন?

উত্তর:


179

আপনি যদি কোনও জিনিস পেতে চান তবে ব্যবহার get()করা আরও সহজ:

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

18
এফওয়াইআই, pkযে কোনও মডেলের জন্য প্রাথমিক কী উল্লেখ করার পক্ষে পছন্দসই উপায়। idক্ষেত্রটি কেবল তখনই উত্পন্ন হয় যদি মডেল লেখক নির্দিষ্টভাবে কোনও প্রাথমিক কী নির্দিষ্ট না করে। লেখক যদি করেনি একটি প্রাথমিক কী ফিল্ড নামে না হয় তা আপনাকে নির্দিষ্ট id, তারপর সেখানে একটা হবে না idক্ষেত্র।
ক্রেগ ট্রেডার

এফওয়াইআই, idএকটি অন্তর্নির্মিত ফাংশনে যা কোনও বস্তুর পরিচয় দেয়। বেশিরভাগ ক্ষেত্রে বিষয়গুলিকে রেফারেন্স করা idসঠিক কাজ যেমন Class.objects.get(id=this_object_id)কাজ করবে। তবে এটি অনুমান করার মতো কিছু।
টম

15

আমি এখানে একই সমস্যার জন্য এসেছি, তবে ভিন্ন কারণে:

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

জাঙ্গোর অন্তর্গত কোডটি পড়ে loading.py, আমি এই সিদ্ধান্তে পৌঁছেছি যে settings.pyআমার অ্যাপ্লিকেশনটির আমার খারাপ পথ রয়েছে যাতে আমার Classমডেল সংজ্ঞা রয়েছে । আমাকে যা করতে হয়েছিল তা হ'ল অ্যাপ্লিকেশনটির পথটি সঠিক করা এবং get()পদ্ধতিটি জরিমানা করে।

এখানে আমার settings.pyসংশোধন করা পথটি রয়েছে:

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

)

সমস্ত বিভ্রান্তির কারণ হয়েছিল কারণ আমি জ্যাঙ্গোর ওআরএমকে স্ট্যান্ডেলোন হিসাবে ব্যবহার করছি, তাই নামস্থানটি এটি প্রতিফলিত করতে হয়েছিল।


2

আপনি এটি করতে পারেন:

obj = ClassModel.get_by_id(object_id)

এটি কাজ করে, তবে আমি নিশ্চিত না যে এটি জ্যাঙ্গো 2 এ সমর্থিত কিনা।


2

তুমি ব্যবহার করতে পার:

objects_all=Class.objects.filter(filter_condition="")

এটি যদি কোনও একটি বস্তু পায় তবে এটি কোয়েরি সেটটি ফেরত দেবে। আপনার যদি প্রয়োজন হয় তবে একটি অবজেক্ট ব্যবহার করুন:

obj=Class.objects.get(conditon="")

0

আপনি get_object_or_404 জাঙ্গো শর্টকাটও ব্যবহার করতে পারেন । যদি বস্তুটি পাওয়া না যায় তবে এটি 404 ত্রুটি উত্থাপন করে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.