জঙ্গো মডেল একক ক্ষেত্র নির্বাচন করছেন


102

আমার কাছে একটি টেবিল / মডেল রয়েছে Employeesএবং আমি ক্যোরিসেট হিসাবে একক ক্ষেত্রের সমস্ত সারি পেতে চাই।

আমি জানি আমি এটি এর মতো করতে পারি (আশা করি আমি এটি ঠিক এখনও করছি):

emp_list = Employees.objects.get(all)
emp_names = emp_list.eng_name

সমস্ত ক্ষেত্র এবং শুধুমাত্র একটি ব্যবহার করে ডাটাবেস জিজ্ঞাসা করবে? এটি করার আরও ভাল (দ্রুত) উপায় কি আছে?


"এবং শুধুমাত্র একটি ব্যবহার করে" বলতে কী বোঝ? এর SELECT colবদলে SELECT *?
সিরো সান্তিলি 郝海东 冠状 病 六四 事件 法轮功

উত্তর:


184
Employees.objects.values_list('eng_name', flat=True)

এটি সকলের একটি সমতল তালিকা তৈরি করে eng_name। আপনি যদি প্রতি সারিতে একাধিক ক্ষেত্র চান, আপনি একটি সমতল তালিকা করতে পারবেন না: এটি টিপলগুলির একটি তালিকা তৈরি করবে:

Employees.objects.values_list('eng_name', 'rank')

উত্তরের জন্য ধন্যবাদ, আমি যদি কেবল 1 বা ততোধিক ক্ষেত্র (সমস্ত না) বেছে নিতে চাই তবে কী হবে?
zentenk

দুঃখিত, আমি প্রশ্নটি বুঝতে পারি না।
ড্যানিয়েল রোজম্যান 21'11

4
দয়া করে দস্তাবেজটি ভাগ করুন
বব

25

ছাড়াও values_listহিসাবে ড্যানিয়েল উল্লেখ আপনার কাছে ব্যবহার করতে পারেন only(অথবা deferউল্টো প্রভাব জন্য) শুধুমাত্র তাদের আইডি এবং নিদিষ্ট ক্ষেত্র থাকার অবজেক্টের একটি queryset পেতে:

Employees.objects.only('eng_name')

এটি একটি একক ক্যোয়ারী চালাবে:

SELECT id, eng_name FROM employees

4
এই কমান্ডটি আমার জ্যাঙ্গো সংস্করণ ২.১.৩ এবং পাইথন সংস্করণ ৩.6.২ এর সমস্ত ক্ষেত্র আমাকে ফিরিয়ে দিচ্ছে।
অনন্তি

এটি কেবল এই ফাইল করা একটি এনে দেবে, তবে আপনি যদি অন্য ক্ষেত্রগুলিতে অ্যাক্সেস করার চেষ্টা করেন তবে একটি পৃথক ডাটাবেস কোয়েরি কার্যকর করা হবে। সুতরাং এটি একটি ভাল অপ্টিমাইজেশন কৌশল, তবে আপনি এই অতিরিক্ত কোয়েরি তৈরি না করে তা নিশ্চিত করুন। অন্যথায় আপনি এটি অর্জনের পরিবর্তে কর্মক্ষমতা হারাবেন।
এয়ারিক সোভেন পিউডিস্ট

6

আমরা মানগুলির চেয়ে প্রয়োজনীয় ক্ষেত্রগুলি নির্বাচন করতে পারি।

Employee.objects.all().values('eng_name','rank')

ক্যোয়ারীটি সফলভাবে সঞ্চালনের পরে ক্ষেত্রের মান একটি ভেরিয়েবলে কীভাবে সংরক্ষণ করা যায়, যেমন। var_name = <ক্যুরি_নাম> <ফিল্ড_নেম> ?
ব্যবহারকারী 12379095

@ ব্যবহারকারী 12379095 ঠিক এইভাবে:var_name = Employee.objects.all().values('eng_name','rank')
কিউশনেশনম্যান

@ ব্যবহারকারী 12379095 এবং তারপরে এই বর্ণ_নামটি ব্যবহার করতে - উদাহরণস্বরূপ: সমস্ত কর্মচারীর নাম এবং পদ মুদ্রণ করুন, আপনি এটি করতে পারেন:for person in var_name: print(person['eng_name'] + " " + person['rank'])
কিউশনেশনম্যান

3

ওসকার পারসসনের উত্তর হ্যান্ডেল করার সর্বোত্তম উপায় কারণ তথ্যটি প্রসঙ্গের নিকটে প্রেরণ করা এবং টেম্পলেট থেকে এটি সাধারণত চিকিত্সা করা সহজ করে তোলে কারণ আমরা একটি সরল মান তালিকার পরিবর্তে অবজেক্টের উদাহরণগুলি (প্রপস পেতে সহজেই পুনঃব্যক্ত) পাই।

এর পরে আপনি কেবল সহজেই পছন্দসই প্রপ পেতে পারেন:

for employee in employees:
    print(employee.eng_name)

বা টেমপ্লেটে:

{% for employee in employees %}

    <p>{{ employee.eng_name }}</p>

{% endfor %}

1

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

active_emps_first_name = Employees.objects.filter(active=True).values_list('first_name',flat=True)

আরও বিশদ এখানে

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