আমি কীভাবে একটি নির্দিষ্ট ক্যোয়ারসেটে শেষ রেকর্ডটি পুনরুদ্ধার করতে পারি?
উত্তর:
সম্পাদনা: আপনার এখন ব্যবহার করতে হবে Entry.objects.latest('pub_date')
আপনি কেবল এইভাবে কিছু ব্যবহার করতে পারেন reverse()
:
queryset.reverse()[0]
এছাড়াও, জাঙ্গো ডকুমেন্টেশন থেকে এই সতর্কতা সাবধান করুন:
... নোট করুন যে
reverse()
কেবলমাত্র একটি ক্যুরিসেটে কল করা উচিত যা একটি সংজ্ঞায়িত ক্রমযুক্ত থাকে (যেমন, যখন কোনও মডেলের বিরুদ্ধে জিজ্ঞাসা করা হয় যা ডিফল্ট ক্রম সংজ্ঞায়িত করে বা ব্যবহারের সময়order_by()
)। যদি কোনও প্রদত্তের জন্য এই জাতীয় অর্ডার সংজ্ঞায়িত না করা হয়QuerySet
, তবেreverse()
এটির কল করার কোনও কার্যকর প্রভাব নেই (কলিংয়ের আগে ক্রমটি অর্ডার সংজ্ঞায়িত ছিলreverse()
, এবং পরে অপরিবর্তিত থাকবে)।
latest(field_name=None)
তারিখ ক্ষেত্র হিসাবে প্রদত্ত ফিল্ড-নাম ব্যবহার করে তারিখ অনুসারে সারণীতে সর্বশেষতম বস্তুটি প্রদান করে।এই উদাহরণটি
pub_date
ক্ষেত্র অনুসারে সারণীতে সর্বশেষতম এন্ট্রি প্রদান করে :
Entry.objects.latest('pub_date')
এটি করার সহজ উপায় হ'ল:
books.objects.all().last()
আপনি এটির মতো প্রথম প্রবেশের জন্য এটি ব্যবহার করুন:
books.objects.all().first()
books.objects.last()
এবং books.objects.first()
কৌশলটি করা উচিত।
XYZ.objects.first()
এবং XYZ.objects.last()
ক্যোরিসেটটি ইতিমধ্যে শেষ হয়ে গেলে, আপনি অন্য ডিবি ইঙ্গিত এড়াতে এটি করতে পারেন -
last = queryset[len(queryset) - 1] if queryset else None
ব্যবহার করবেন না try...except...
।
জ্যাঙ্গো IndexError
এই ক্ষেত্রে ফেলে দেয় না ।
এটি ছুড়ে দেয় AssertionError
বা ProgrammingError
(যখন আপনি অ-পাইনের সাহায্যে অপশন চালাবেন)
যদি জাঙ্গো ১.6 এবং তার বেশি ব্যবহার করে থাকে তবে নতুন এপিআই চালু হওয়ার সাথে সাথে এটি এখন আরও সহজ -
Model.object.earliest()
এটি বিপরীত দিকনির্দেশ সহ সর্বশেষ () দেবে।
পিএস - আমি এর পুরানো প্রশ্নটি জানি, আমি পোস্ট করছি যেন কেউ এই প্রশ্নে অবতরণ করে, তারা এই নতুন বৈশিষ্ট্যটি জানতে পারে এবং পুরানো পদ্ধতিটি ব্যবহার করে শেষ না করে।
আপনি ব্যবহার করতে পারেন Model.objects.last()
বা Model.objects.first()
। কোন যদিordering
সংজ্ঞায়িত হয় তবে প্রাথমিক কী এর ভিত্তিতে ক্যোরিসেটটি অর্ডার করা হয়েছে। আপনি যদি আচরণের জিজ্ঞাসাটিকে অর্ডার করতে চান তবে আপনি শেষ দুটি পয়েন্টটি উল্লেখ করতে পারেন।
আপনি যদি এটি করতে ভাবছেন, Model.objects.all().last()
শেষটি Model.objects.all().first()
পুনরুদ্ধার করতে এবং ক্যোয়ারেটে প্রথম উপাদানটি পুনরুদ্ধার করতে বা filters
দ্বিতীয় চিন্তা ছাড়াই ব্যবহার করছেন । তারপরে নীচে কিছু ক্যাভ্যাট দেখুন।
এখানে লক্ষণীয় গুরুত্বপূর্ণ অংশটি হ'ল আপনি ordering
যদি আপনার মডেলটিতে কোনওটি অন্তর্ভুক্ত না করেন তবে ডেটা কোনও ক্রমে থাকতে পারে এবং আপনার এলোমেলো শেষ বা প্রথম উপাদান থাকবে যা প্রত্যাশিত ছিল না।
যেমন ধরা যাক আপনার কাছে এমন একটি মডেল রয়েছে যার নাম Model1
2 কলাম id
এবং item_count
10 টি সারি সহ আইডি 1 থেকে 10 রয়েছে [কোনও অর্ডার নির্ধারিত নেই]
আপনি যদি মডেল.ওবজেক্টস.এল ()। (শেষ।) এ জাতীয় পছন্দ করে থাকেন তবে আপনি 10 টি উপাদানের তালিকা থেকে যে কোনও উপাদান পেতে পারেন। হ্যাঁ, কোনও ডিফল্ট অর্ডার না থাকায় এটি এলোমেলো।
তাহলে কি করা উচিত?
ordering
আপনার মডেলের কোনও ক্ষেত্র বা ক্ষেত্রের ভিত্তিতে সংজ্ঞা দিতে পারেন । এটির পাশাপাশি পারফরম্যান্সের সমস্যা রয়েছে, এটিও পরীক্ষা করে দেখুন। রেফারেন্স: এখানেorder_by
আনার সময় আপনি ব্যবহার করতে পারেন । এটার মত:Model.objects.order_by('item_count').last()
সর্বাধিক সহজ উপায়, বর্তমান ক্রমটি সম্পর্কে চিন্তা না করেই ক্যোয়ারীসেটকে একটি তালিকায় রূপান্তর করা যাতে আপনি পাইথনের সাধারণ নেতিবাচক সূচকটি ব্যবহার করতে পারেন। তাই ভালো:
list(User.objects.all())[-1]