2011-11-10 21 views
22

मान लीजिए मेरे पास मेरे डीजेंगो मॉडल में पसंद क्षेत्र है जिसमें कई विकल्प शामिल हैं। अब भविष्य में यदि मैंने किसी अन्य नाम (पसंद) के साथ मौजूदा विकल्प (विकल्प) को बदल दिया है, तो क्या उस विकल्प (विकल्प) के साथ मॉडल में मौजूदा रिकॉर्ड भी बदले जाएंगे? या व्यवस्थापक पृष्ठ में मुझे उस नए विकल्प को मैन्युअल रूप से सेट करने की आवश्यकता है?Django मॉडल में ChoiceField

मैं इसे कैसे प्राप्त कर सकता हूं?

उत्तर

79

ChoiceFields मूल्यों के रूप में डेटाबेस में संग्रहीत हैं, इसलिए the documentation से एक उदाहरण लेते हैं:

class Foo(models.Model): 
    GENDER_CHOICES = (
     ('M', 'Male'), 
     ('F', 'Female'), 
    ) 
    gender = models.CharField(max_length=1, choices=GENDER_CHOICES) 

इसलिए यदि आप एक दिन उन का नाम बदलने का फैसला डेटाबेस, 'एम' और 'एफ' स्टोर करेगा इस * की तरह:

class Foo(models.Model): 
    GENDER_CHOICES = (
     ('M', 'Homme'), 
     ('F', 'Femme'), 
    ) 
    gender = models.CharField(max_length=1, choices=GENDER_CHOICES) 

तो आप कहीं भी विस्तार किया मूल्यों 'पुरुष' या 'महिला' अब 'Homme' होगा या 'फेम' का उपयोग करें।

यदि आप मूल्यों (यानी 'एम' और 'एफ') को स्वयं बदलना चाहते हैं, तो आप डेटाबेस को अपडेट करना चाहते हैं, इसलिए यदि आप 'एम' को 'एच' में बदलना चाहते हैं, तो आप ' घ उपयोग update:

Foo.objects.filter(gender = 'M').update(gender = 'H') 

जब तक आप एक अच्छे कारण के लिए, मैं यह कर रहा से बचने था मिल गया है - जब से तुम GENDER_CHOICES के लिए अपने परिवर्तन करें और अपने update क्वेरी यकीन है कि एक साथ किया जाता है बनाने की आवश्यकता होगी।

* और हाँ, मुझे पता है कि यह अनुवाद करने का एक बेवकूफ तरीका है!