জ্যাঙ্গো: চয়েস মান প্রদর্শন করুন


245

models.py:

class Person(models.Model):
    name = models.CharField(max_length=200)
    CATEGORY_CHOICES = (
        ('M', 'Male'),
        ('F', 'Female'),
    )
    gender = models.CharField(max_length=200, choices=CATEGORY_CHOICES)
    to_be_listed = models.BooleanField(default=True)
    description = models.CharField(max_length=20000, blank=True)

views.py:

def index(request):
    latest_person_list2 = Person.objects.filter(to_be_listed=True)
    return object_list(request, template_name='polls/schol.html',
                       queryset=latest_person_list, paginate_by=5)

টেমপ্লেট উপর যখন আমি কল person.gender, আমি পেতে 'M'বা 'F'পরিবর্তে 'Male'বা 'Female'

কোড ( / ) এর পরিবর্তে মান ( 'Male'বা 'Female') কীভাবে প্রদর্শন করবেন ?'M''F'



আমি এই পদ্ধতিটি ব্যবহার করে দেখেছি, আমার টেমপ্লেটে আমি ব্যবহার করছি: অবজেক্ট_লিস্টে থাকা ব্যক্তির জন্য {% কিছু t html {{person.get_geender_display ()} t html {% endfor% end আমি নিম্নলিখিত ত্রুটিটি পাচ্ছি: ব্যতিক্রম মান: পার্স করতে পারিনি অবশিষ্ট: '()' থেকে 'person.get_geender_display ()'
শ্যাঙ্কজে

7
আমার খারাপ, person.get_geender_display এর পরে আমার '()' অন্তর্ভুক্ত করা উচিত ছিল না। এটা এখন কাজ করছে. ধন্যবাদ।
শ্যাঙ্কজে

3
কেবলমাত্র একটি সামান্য মন্তব্য, যেহেতু লিঙ্গ কেবল এম বা এফ (1 অক্ষরের দৈর্ঘ্য) হবে এটি চার্ফিল্ডের সর্বোচ্চ দৈর্ঘ্য নির্ধারণ করার কোনও ধারণা নেই 200। সহ max_lenght=1যথেষ্ট, আপনার সাইটটিকে আরও দক্ষ করে তুলবে এবং আপনি নিশ্চিত করবেন যে আপনার ভুল ডেটা হবে না। :)
আলেজান্দ্রো গার্সিয়া

উত্তর:


502

দেখে মনে হচ্ছে আপনি সঠিক পথে ছিলেন - get_FOO_display()আপনি যা চান তা অবশ্যই:

ইন টেমপ্লেট , আপনি অন্তর্ভুক্ত করবেন না ()একটি পদ্ধতি নামে। নিম্নলিখিতগুলি করুন:

{{ person.get_gender_display }}

এই পদ্ধতিটি অমূল্য। তবে পদ্ধতিটি ব্যবহার করে, সঞ্চিত মানটি পুনরুদ্ধার করার উপায় কী বলে, {। I.item. কি_তো_পুট_এখানে}}?
খোফি

11
কেবল লক্ষ্য করুন, যে কেউ তাদের টেমপ্লেটগুলির জন্য জিনজা 2 ব্যবহার করছেন, আপনার প্যারেন্টেসিস অন্তর্ভুক্ত করা উচিত। {{ person.get_gender_display() }}
আদম বি

1
বোনাস পয়েন্ট: আপনি যদি JSON এর মাধ্যমে আপনার তথ্য প্রেরণ করছেন (উদাহরণস্বরূপ একটি পৃষ্ঠা চিত্রের দৃশ্যে) তবে এটি করার সর্বোত্তম উপায় কী? আদর্শভাবে একে একে মডেলগুলিকে ইনস্ট্যান্ট করার ও get_field_display () কল করার প্রয়োজন নেই।
ডিলান ইয়ং

7
জ্যাঙ্গোকে ভালবাসবে, প্রায় 10 বছর পরে এবং উত্তরটি এখনও বৈধ! Thx +1 এবং আমার উপর পান করুন।
মার্ক

1
কোনওভাবে এটি অনূদিত পাঠ্যটি আনবে না। যদি আই 18 ওয়েবসাইটে ইতিমধ্যে প্রয়োগ করা হয়েছে তবে কীভাবে অনুবাদিত পাঠ্য পাবেন?
অনুপ নায়ার

16

পছন্দগুলি সেট করা প্রতিটি ক্ষেত্রে, অবজেক্টটির একটি get_FOO_display () পদ্ধতি থাকবে, যেখানে FOO ক্ষেত্রের নাম। এই পদ্ধতিটি ক্ষেত্রের "মানব-পঠনযোগ্য" মানটি প্রদান করে।

ভিউগুলিতে

person = Person.objects.filter(to_be_listed=True)
context['gender'] = person.get_gender_display()

টেমপ্লেটে

{{ person.get_gender_display }}

Get_FOO_display এর ডকুমেন্টেশন ()


1

অন্যরা উল্লেখ করেছে যে একটি get_FOO_display পদ্ধতি আপনার প্রয়োজন। আমি এটি ব্যবহার করছি:

def get_type(self):
    return [i[1] for i in Item._meta.get_field('type').choices if i[0] == self.type][0]

যা কোনও নির্দিষ্ট আইটেমের সমস্ত পছন্দগুলিতে পুনরাবৃত্তি করে যতক্ষণ না এটি আইটেমের সাথে মেলে এমন একটি আবিষ্কার করে finds

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