2012-08-28 11 views
28

क्या मॉडल फ़ील्ड 'विकल्प' मान तक पहुंचने के लिए कोई तरीका है (फ़ॉर्म का उपयोग किए बिना)? और या तो एक दृश्य या टेम्पलेटएक्सेस Django के field.choices

उत्तर

3

मुझे लगता है कि आप get_fieldname_display() समारोह के लिए देख रहे हैं में मूल्यों की सूची प्राप्त -

मैं field.choices की तरह कुछ करना चाहते हैं।

34

निश्चित रूप से, मॉडल फ़ील्ड की choice विशेषता का उपयोग करें।

MyModel._meta.get_field('foo').choices 
my_instance._meta.get_field('foo').choices 
+0

क्या होगा यदि मैं अपने Django टेम्पलेट्स में उन्हें चाहता था के साथ विकल्प वापस मिल सकता है? –

+1

आपके दृश्य में पहुंच योग्य कुछ भी टेम्पलेट में पहुंच योग्य है, आपको इसे टेम्पलेट संदर्भ में पास करने की आवश्यकता है। चूंकि यह अंडरस्कोर से शुरू होता है, इसलिए आपको संदर्भ में फ़ील्ड इंस्टेंस को मैन्युअल रूप से पास करना होगा। –

+0

सही! वास्तव में जो मैं स्रोत लॉल में खोज करने की कोशिश कर रहा हूं .. – Amyth

4

आप इस तरह अपने विकल्पों की घोषणा कर रहे हैं:

class Topic(models.Model): 

    PRIMARY = 1 
    PRIMARY_SECONDARY = 2 
    TOPIC_LEVEL = ((PRIMARY, 'Primary'), 
        (PRIMARY_SECONDARY, 'Primary & Secondary'),) 

    topic_level = models.IntegerField('Topic Level', choices=TOPIC_LEVEL, 
      default=1) 

कौन सा यह वास्तव में करने का एक अच्छा तरीका है। देखें: http://www.b-list.org/weblog/2007/nov/02/handle-choices-right-way/

तो फिर तुम बस Topic.TOPIC_LEVEL

+0

मैं अपने विचार में इस तरह से उपयोग कर रहा हूं, लेकिन 'प्राथमिक, प्राथमिक और माध्यमिक' (जैसा कि यह होना चाहिए, ऊपर दिए गए उदाहरण में) प्राप्त करने के बजाय मुझे 'प्राथमिक, 'प्राथमिक'), (प्राथमिक_साधिकारी, 'प्राथमिक & माध्यमिक ') '। वह क्यों है, और इसे कैसे ठीक किया जाए? –

+1

@LjubisaLivac कारण यह है कि आपने 'TOPIC_LEVEL' को जोड़े के tuple' (डेटाबेस_value, 'readable_value') के रूप में घोषित किया है और अब आप इसे इनपुट के रूप में ठीक कर रहे हैं। ऐसा करने में कई फायदे हैं, उनमें से एक आपके कोड को संभालने वाले अगले व्यक्ति को पठनीयता है। यह टूटा नहीं गया है: कई अनुप्रयोगों के बजाय मनुष्यों द्वारा पढ़ने के लिए वास्तविक डेटाबेस मान होगा। यदि आप केवल स्ट्रिंग चाहते हैं, तो आप उन्हें [i [1] के लिए Topic.TOPIC_LEVEL] में पुनर्प्राप्त कर सकते हैं। –

संबंधित मुद्दे