2011-12-12 22 views
8

मैं सीमित विकल्पों के साथ एक क्षेत्र बनाने के लिए कोशिश कर रहा हूँ:django मॉडल चारफिल्ड: max_length काम नहीं करता है?

Action_Types=(
       ('0','foo'), 
       ('1','bar'), 
      ) 

class Foo(models.Model): 
    myAction=models.CharField(max_length=1,choices=Action_Types) 

    def __unicode__(self): 
     return '%d %s'%(self.pk,self.myAction) 

हालांकि, जब मैं नियमों के उल्लंघन सामग्री डालने के लिए कोशिश कर रहा था, यह किसी भी त्रुटि या चेतावनी संदेश के बिना (सफल "manage.py खोल" के साथ)। ऐसा लगता है कि किसी भी लंबाई का कोई भी पाठ इस क्षेत्र में रखा जा सकता है। मैं बैकएंड के रूप में SQLite3 का उपयोग कर रहा हूँ।

क्या ऐसा होना चाहिए? या अगर मुझे कुछ याद आया?

उत्तर

16

SQLite VARCHAR की लंबाई को लागू नहीं करता है।

SQLite Frequently asked questions से:

(9) SQLite में एक VARCHAR का अधिकतम आकार क्या है?

SQLite VARCHAR की लंबाई को लागू नहीं करता है। आप एक VARCHAR (10) घोषित कर सकते हैं और SQLite आपको 500 वर्णों को रखने में प्रसन्न होंगे। और यह सभी 500 अक्षरों को बरकरार रखेगा - यह कभी भी छंटनी नहीं करता है।

यदि आप django व्यवस्थापक या मॉडल रूपों का उपयोग कर डेटाबेस को अद्यतन करते हैं, तो Django आपके लिए लंबाई सत्यापन करेगा। खोल में, आप सहेजने से पहले full_clean मैन्युअल रूप से कॉल कर सकते हैं, और सत्यापन त्रुटि पकड़ सकते हैं।

f = Foo(myAction="more than 1 char") 
try: 
    f.full_clean() 
    f.save() 
except ValidationError as e: 
    # Do something based on the errors contained in e.message_dict. 
+1

उत्तर के लिए धन्यवाद, अलास्डेयर! ऐसा लगता है कि पूर्णता की जांच करने के लिए एकमात्र जगह पूर्ण_कलैन() का उपयोग कर है। –

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

  • कोई संबंधित समस्या नहीं^_^