2009-12-01 12 views
50

कहें कि मेरे पास एक Django क्लास ऐसा कुछ है:मैं Django मॉडल फ़ील्ड के max_length प्रोग्रामेटिक रूप से कैसे प्राप्त कर सकता हूं?

class Person(models.Model): 
    name = models.CharField(max_length=50) 
    # ... 

मैं name फ़ील्ड के लिए max_length मान प्रोग्रामेटिक रूप से कैसे प्राप्त कर सकता हूं?

उत्तर

69

Person._meta.get_field('name').max_length आपको यह मूल्य देगा। लेकिन _meta का उपयोग करने के लिए यह सुझाव है कि यह ऐसा कुछ है जो आपको सामान्य उपयोग में नहीं करना चाहिए।

संपादित करें: के रूप में कार्ल ने बताया, इस नामकरण भ्रामक है और यह काफी इसका इस्तेमाल करने की स्वीकार्य प्रतीत होता है: http://www.b-list.org/weblog/2007/nov/04/working-models/

+8

अच्छा जवाब, लेकिन दूसरी टिप्पणी से असहमत। _ मेटा के सामने अंडरस्कोर भ्रामक है, आईएमओ (और मैंने देखा है कि Django कोर देव सहमत हैं; यह आंशिक रूप से मॉडल फ़ील्ड के साथ नाम संघर्ष से बचने के लिए है)। _meta का उपयोग करना एक बुरा गंध नहीं है, यह एक अच्छा है; इसका मतलब है कि आप ड्रवाई कर रहे हैं और अनचाहे धारणाएं नहीं बना रहे हैं। –

+0

कार्ल: असल में आप मेरी टिप्पणी से सहमत हैं, जो केवल नामकरण सम्मेलन और इसके सामान्य रूप से निहितार्थ को देख रहा था। आप सही हैं कि यह भ्रामक है हालांकि: http://www.b-list.org/weblog/2007/nov/04/working-models/ देखें उदाहरण के लिए –

+0

मुझे इस नामकरण को अतीत में परेशान पाया गया है, क्योंकि आप Django टेम्पलेट्स में शुरुआत में अंडरस्कोर के साथ चर का उपयोग नहीं कर सकते हैं। हमने एक नई संपत्ति को जोड़ा जो कि राउंड को पाने के लिए _ मेटा पर इंगित करता था। –

2

प्रश्न मॉडल के बारे में है, लेकिन लोगों को (रूपों के लिए भी ऐसा ही करने की कोशिश कर के लिए कि कैसे है मैं इस सूत्र में समाप्त हो गया), मुझे लगता है कि इस दृष्टिकोण काफी सरल और स्पष्ट है:
1. एक टेम्पलेट में:
{{form.name.field.max_length}}

2. अजगर कोड में (उदाहरण के लिए ध्यान में रखते हुए)
form.name.field.max_length

+2

के बाहर से संरक्षित सदस्य तक पहुंचने का यह एक अच्छा अभ्यास है, सवाल मॉडल के संबंध में था, फॉर्म नहीं –

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