জ্যাঙ্গো মান_ তালিকা বনাম মান


146

জ্যাঙ্গোতে, নিম্নলিখিত দুটিয়ের মধ্যে পার্থক্য কী:

Article.objects.values_list('comment_id', flat=True).distinct()

বনাম

Article.objects.values('comment_id').distinct()

আমার লক্ষ্য প্রতিটির অধীনে স্বতন্ত্র মন্তব্য আইডির একটি তালিকা পাওয়া Article। আমি ডকুমেন্টেশন পড়েছি (এবং বাস্তবে উভয় পন্থা ব্যবহার করেছি)। ফলাফলগুলিও স্পষ্টতই অনুরূপ বলে মনে হচ্ছে।


ভ্যালু_লিস্টের সাহায্যে আপনি অভিধানটি if self.id in Article.objects.values_list('comment_id', flat=True):অ্যাক্সেস করতে হবে এমন মানগুলি ব্যবহার করার সময় করতে পারেন
dnaranjo

1
@ ডানরঞ্জো - আপনি পারলেন তবে কেন শুধু করবেন না Article.objects.filter(comment_id=self.id).exists()?

1
এটি একটি পৃথক প্রশ্নের উত্তর
dranranjo

উত্তর:


250

values()পদ্ধতি QuerySet অভিধান ধারণকারী ফেরৎ:

<QuerySet [{'comment_id': 1}, {'comment_id': 2}]>

values_list()পদ্ধতি QuerySet tuples ধারণকারী ফেরৎ:

<QuerySet [(1,), (2,)]>

আপনি যদি values_list()একটি একক ক্ষেত্রের সাথে ব্যবহার করে থাকেন তবে আপনি flat=True1-টিউপসগুলির পরিবর্তে একক মানগুলির একটি ক্যোরিসেটটি ফেরত দিতে ব্যবহার করতে পারেন:

<QuerySet [1, 2]>

ওহ এবং দুটি ভিস-এ-ভিসের মধ্যে কোনও পার্থক্য নেই distinct()হাহ কিভাবে ব্যবহৃত হয়?
হাসান বেগ

2
না, আমি মনে করি না যে এটি distinct()অন্যরকমভাবে কাজ করে। গুরুত্বপূর্ণ জিনিসটি হ'ল কোন ডেটা স্ট্রাকচারের সাথে আপনি কাজ করতে চান।
আলাসদায়ের

3
values()আয় একটি QuerySetএবং না একটি list। যদিও বস্তুটি values()দেখতে listএকটির মতো ফিরে আসে তবে কিছু ক্ষেত্রে এটি এর মতো আচরণ করে না। উদাহরণস্বরূপ, এটি জসন সিরিয়ালযোগ্য হবে না যতক্ষণ না আমরা এটিকে একটি তালিকাতে রূপান্তর করি
অভিজিৎ ঘাটে

@ অজিজিৎ ঘাটে ভাল কথা, আমি আরও পরিষ্কার করার জন্য উত্তরটি আপডেট করেছি।
আলাসডায়ার

2
আপনি সহজেই ফাংশনটি values_listব্যবহার করে listlist(Article.objects.values_list('comment_id', flat=True).distinct())
রিটার্নটিকে

55

মান ()

dictionariesপুনরাবৃত্ত হিসাবে ব্যবহৃত যখন মডেল দৃষ্টান্তের তুলনায় পরিবর্তিত একটি ক্যোরিসেট প্রদান করে ।

values_list ()

list of tuplesপুনরাবৃত্ত হিসাবে ব্যবহৃত যখন মডেল দৃষ্টান্তের তুলনায় পরিবর্তিত একটি ক্যোরিসেট প্রদান করে ।

স্বতন্ত্র ()

স্বতন্ত্র eliminate the duplicateউপাদান ব্যবহার করা হয় ।

উদাহরণ:

Article.objects.values_list('id', flat=True) # flat=True will remove the tuples and return the list   
[1, 2, 3, 4, 5, 6]

Article.objects.values('id')
[{'id':1}, {'id':2}, {'id':3}, {'id':4}, {'id':5}, {'id':6}]

2
সুতরাং এটি অভিধানগুলির একটি তালিকা যা ফেরত এসেছেvalues
হাসান বৈগ

কেবল পরিষ্কার করতে: distinct()নকল উপাদানগুলি কোয়েরি ফলাফল থেকে সরিয়ে দেয়, ডাটাবেস থেকে নয়।
oz19

5

আপনি এর সাথে বিভিন্ন মান পেতে পারেন:

set(Article.objects.values_list('comment_id', flat=True))
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.