ক্যোরিসেটে সর্বশেষ রেকর্ড পান


89

আমি কীভাবে একটি নির্দিষ্ট ক্যোয়ারসেটে শেষ রেকর্ডটি পুনরুদ্ধার করতে পারি?

উত্তর:


81

সম্পাদনা: আপনার এখন ব্যবহার করতে হবে Entry.objects.latest('pub_date')


আপনি কেবল এইভাবে কিছু ব্যবহার করতে পারেন reverse():

queryset.reverse()[0]

এছাড়াও, জাঙ্গো ডকুমেন্টেশন থেকে এই সতর্কতা সাবধান করুন:

... নোট করুন যে reverse()কেবলমাত্র একটি ক্যুরিসেটে কল করা উচিত যা একটি সংজ্ঞায়িত ক্রমযুক্ত থাকে (যেমন, যখন কোনও মডেলের বিরুদ্ধে জিজ্ঞাসা করা হয় যা ডিফল্ট ক্রম সংজ্ঞায়িত করে বা ব্যবহারের সময় order_by())। যদি কোনও প্রদত্তের জন্য এই জাতীয় অর্ডার সংজ্ঞায়িত না করা হয় QuerySet, তবে reverse()এটির কল করার কোনও কার্যকর প্রভাব নেই (কলিংয়ের আগে ক্রমটি অর্ডার সংজ্ঞায়িত ছিল reverse(), এবং পরে অপরিবর্তিত থাকবে)।


4
যেমনটি জাঙ্গো ডক্সে বলা হয়েছে: "নোট করুন যে বিপরীত () সাধারণত একটি ক্যুরিসেটে কল করা উচিত যা একটি সংজ্ঞায়িত ক্রমযুক্ত থাকে (উদাহরণস্বরূপ, যখন কোনও মডেল যা ডিফল্ট ক্রম সংজ্ঞায়িত করে বা অর্ডার_বি () ব্যবহার করে) তার বিরুদ্ধে অনুসন্ধান করা হয়। যদি না এই জাতীয় ক্রম একটি প্রদত্ত কোয়েরীসেটের জন্য সংজ্ঞায়িত করা হয়েছে, এতে বিপরীত () কল করার কোনও প্রকৃত প্রভাব নেই (বিপরীত () কল করার আগে ক্রমটি অপরিবর্তিত ছিল এবং পরে অপরিবর্তিত থাকবে) "।
jujule

6
2017 এবং গৃহীত উত্তরগুলি এখন পুরানো। নীচে প্রদর্শিত হিসাবে আপনার ক্যোরিসেট.লাস্ট () ব্যবহার করা উচিত।
wobbily_col

137

জ্যাঙ্গো ডক :

latest(field_name=None) তারিখ ক্ষেত্র হিসাবে প্রদত্ত ফিল্ড-নাম ব্যবহার করে তারিখ অনুসারে সারণীতে সর্বশেষতম বস্তুটি প্রদান করে।

এই উদাহরণটি pub_dateক্ষেত্র অনুসারে সারণীতে সর্বশেষতম এন্ট্রি প্রদান করে :

Entry.objects.latest('pub_date')

4
এটি এটি করার ঝরঝরে উপায়। এছাড়াও, "যদি আপনার মডেলের মেটা get_latest_by নির্দিষ্ট করে, আপনি দস্তাবেজ অনুসারে সর্বশেষ ()" তে ক্ষেত্রের নাম যুক্তিটি ছেড়ে দিতে পারেন।
ফ্রেড্রিক মুলারস্ট্র্যান্ড

51

এটি করার সহজ উপায় হ'ল:

books.objects.all().last()

আপনি এটির মতো প্রথম প্রবেশের জন্য এটি ব্যবহার করুন:

books.objects.all().first()

16
books.objects.last() এবং books.objects.first()কৌশলটি করা উচিত।
চন্দন

এটি একসাথে গ্রহণযোগ্য উত্তর হওয়া উচিত XYZ.objects.first()এবং XYZ.objects.last()
স্লাজমা

আমি মনে করি আরনাউদ পি এর উপায়টি আরও উপযুক্ত। এটি যদি ভুল না হয় তবে এটি ডিবিতে সমস্ত আইটেম আনপ্যাক করবে যেখানে পরবর্তীতে ডিবি কোয়েরি ব্যবহার করে শেষটি টানবে।
লার্চো

33

জ্যাঙ্গো> = 1.6

ক্যোরিসেট পদ্ধতিগুলি প্রথম () এবং সর্বশেষ () যুক্ত করা হয়েছে যা ফিল্টারগুলির সাথে মিলে যাওয়া প্রথম বা শেষ অবজেক্টটি ফিরিয়ে দেওয়া সুবিধা পদ্ধতি methods কোনও বস্তুর মিল না থাকলে কিছুই ফেরায় না।


32

প্রথম অবজেক্টটি পেতে:

ModelName.objects.first()

শেষ অবজেক্টগুলি পেতে:

ModelName.objects.last()

আপনি ফিল্টার ব্যবহার করতে পারেন

ModelName.objects.filter(name='simple').first()

এটি আমার পক্ষে কাজ করে।


6

ক্যোরিসেটটি ইতিমধ্যে শেষ হয়ে গেলে, আপনি অন্য ডিবি ইঙ্গিত এড়াতে এটি করতে পারেন -

last = queryset[len(queryset) - 1] if queryset else None

ব্যবহার করবেন না try...except...
জ্যাঙ্গো IndexErrorএই ক্ষেত্রে ফেলে দেয় না ।
এটি ছুড়ে দেয় AssertionErrorবা ProgrammingError(যখন আপনি অ-পাইনের সাহায্যে অপশন চালাবেন)


4
আপনার ক্যোরিসেটটি ইতিমধ্যে অর্ডার করা হয়েছে বলে ধরে নেওয়া, এটি "শীর্ষস্থানীয় উত্তর" হওয়া উচিত কারণ এটিই একমাত্র সমাধান যা ডাটাবেসে আবার আঘাত করে না।
ডেভিড ডি

4

যদি জাঙ্গো ১.6 এবং তার বেশি ব্যবহার করে থাকে তবে নতুন এপিআই চালু হওয়ার সাথে সাথে এটি এখন আরও সহজ -

Model.object.earliest()

এটি বিপরীত দিকনির্দেশ সহ সর্বশেষ () দেবে।

পিএস - আমি এর পুরানো প্রশ্নটি জানি, আমি পোস্ট করছি যেন কেউ এই প্রশ্নে অবতরণ করে, তারা এই নতুন বৈশিষ্ট্যটি জানতে পারে এবং পুরানো পদ্ধতিটি ব্যবহার করে শেষ না করে।


4
দস্তাবেজগুলি থেকে: প্রাচীনতম () এবং সর্বশেষ () এর জন্য হয় ক্ষেত্রের নাম প্যারামিটার বা মডেলটিতে 'get_latest_by' দরকার
পাঁচিকিওর

1

আপনি ব্যবহার করতে পারেন Model.objects.last()বা Model.objects.first()। কোন যদিordering সংজ্ঞায়িত হয় তবে প্রাথমিক কী এর ভিত্তিতে ক্যোরিসেটটি অর্ডার করা হয়েছে। আপনি যদি আচরণের জিজ্ঞাসাটিকে অর্ডার করতে চান তবে আপনি শেষ দুটি পয়েন্টটি উল্লেখ করতে পারেন।

আপনি যদি এটি করতে ভাবছেন, Model.objects.all().last()শেষটি Model.objects.all().first()পুনরুদ্ধার করতে এবং ক্যোয়ারেটে প্রথম উপাদানটি পুনরুদ্ধার করতে বা filtersদ্বিতীয় চিন্তা ছাড়াই ব্যবহার করছেন । তারপরে নীচে কিছু ক্যাভ্যাট দেখুন।

এখানে লক্ষণীয় গুরুত্বপূর্ণ অংশটি হ'ল আপনি orderingযদি আপনার মডেলটিতে কোনওটি অন্তর্ভুক্ত না করেন তবে ডেটা কোনও ক্রমে থাকতে পারে এবং আপনার এলোমেলো শেষ বা প্রথম উপাদান থাকবে যা প্রত্যাশিত ছিল না।

যেমন ধরা যাক আপনার কাছে এমন একটি মডেল রয়েছে যার নাম Model12 কলাম idএবং item_count10 টি সারি সহ আইডি 1 থেকে 10 রয়েছে [কোনও অর্ডার নির্ধারিত নেই]

আপনি যদি মডেল.ওবজেক্টস.এল ()। (শেষ।) এ জাতীয় পছন্দ করে থাকেন তবে আপনি 10 টি উপাদানের তালিকা থেকে যে কোনও উপাদান পেতে পারেন। হ্যাঁ, কোনও ডিফল্ট অর্ডার না থাকায় এটি এলোমেলো।

তাহলে কি করা উচিত?

  1. আপনি orderingআপনার মডেলের কোনও ক্ষেত্র বা ক্ষেত্রের ভিত্তিতে সংজ্ঞা দিতে পারেন । এটির পাশাপাশি পারফরম্যান্সের সমস্যা রয়েছে, এটিও পরীক্ষা করে দেখুন। রেফারেন্স: এখানে
  2. বা order_byআনার সময় আপনি ব্যবহার করতে পারেন । এটার মত:Model.objects.order_by('item_count').last()

-5

সর্বাধিক সহজ উপায়, বর্তমান ক্রমটি সম্পর্কে চিন্তা না করেই ক্যোয়ারীসেটকে একটি তালিকায় রূপান্তর করা যাতে আপনি পাইথনের সাধারণ নেতিবাচক সূচকটি ব্যবহার করতে পারেন। তাই ভালো:

list(User.objects.all())[-1]

4
এটি ডিবি থেকে সমস্ত বস্তুর অনুসন্ধান করবে এবং তারপরে প্রথমটি নেবে
মার্ভেরিয়াক

ভাল যুক্তি! স্পষ্টতই এটি এক মাধ্যমে মনে হয় নি। .Revers () উত্তর (বর্তমানে নির্বাচিত) হ'ল সঠিক উপায়!
জোশ আওয়ারিসমান
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.