Django: प्रदर्शन विकल्प मान


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'



मैंने यह तरीका आज़माया, अपने टेम्पलेट में मैं उपयोग कर रहा हूं: {% for person_ object_list%} कुछ html {{person.get_gender_display ()}} html {% endfor%} मुझे निम्न त्रुटि मिल रही है: अपवाद मान पार्स नहीं हो सका शेष: '()' से 'person.get_gender_display ()'
Shankze

7
मेरा बैड, मुझे person.get_gender_display के बाद '()' को शामिल नहीं करना चाहिए था। अब यह काम कर रहा है। धन्यवाद।
शांकेज

3
बस एक छोटी सी टिप्पणी, चूँकि लिंग केवल M या F (1 वर्ण का होता है) होगा, यह कोई समझदारी नहीं है कि charfield की अधिकतम लंबाई निर्धारित की जाए 200। के साथ max_lenght=1पर्याप्त है, आपकी साइट को अधिक कुशल बना देगा और आप यह सुनिश्चित करेंगे कि आपके पास गलत डेटा नहीं है। :)
एलेजांद्रो गार्सिया

जवाबों:


502

ऐसा लगता है कि आप सही रास्ते पर थे - get_FOO_display()सबसे निश्चित रूप से आप क्या चाहते हैं:

में टेम्पलेट्स , आप शामिल नहीं हैं ()एक विधि के नाम पर। निम्न कार्य करें:

{{ person.get_gender_display }}

यह विधि अनमोल है। लेकिन इस विधि का उपयोग करने के बाद, {{i.item.what_to_put_here}} में संग्रहीत मान को पुनः प्राप्त करने का तरीका क्या है?
खोही

11
बस ध्यान दें, उनके टेम्पलेट्स के लिए जिनजा 2 का उपयोग करने वाले किसी के लिए, आपको कोष्ठक को शामिल करना चाहिए। {{ person.get_gender_display() }}
adam b

1
बोनस अंक: यदि आप JSON (उदाहरण के लिए पृष्ठांकन परिदृश्य में) के माध्यम से अपनी जानकारी भेज रहे हैं, तो इसका सबसे अच्छा तरीका क्या है? आदर्श रूप से एक-एक करके मॉडल्स को तुरंत खत्म करने और get_field_display () को कॉल किए बिना।
डायलनयुंग

7
होगा प्यार Django, लगभग 10 साल बाद और जवाब अभी भी वैध है! Thx +1 और मुझ पर पियो।
मार्क

1
किसी तरह यह अनुवादित पाठ नहीं मिलता है। यदि वेबसाइट पर i18 पहले से ही लागू है, तो अनुवादित पाठ कैसे प्राप्त करें, इस पर कोई विचार?
अनूप नायर

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]

जो एक विशेष आइटम के सभी विकल्पों पर निर्भर करता है, जब तक कि वह उस एक को नहीं पाता है जो आइटम प्रकार से मेल खाता है

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.