2012-09-03 19 views
6

मैं django के लिए नया हूँ है और मैं get_or_create मॉडल समारोह का उपयोग करने के कोशिश कर रहा हूँ, लेकिन मैं एक त्रुटि भी मिलता है मैं अपने मॉडलDjango get_or_create लौट त्रुटि: 'टपल' ऑब्जेक्ट कोई विशेषता

AttributeError at /professor/adicionar-compromisso 
'tuple' object has no attribute 'dias' 
Request Method: POST 
Request URL: http://localhost:8000/professor/adicionar-compromisso 
Django Version: 1.4.1 
Exception Type: AttributeError 
Exception Value:  
'tuple' object has no attribute 'dias' 
Exception Location: c:\htdocs\rpv\GerenDisponibilidade\professor\models.py in inserirCompromisso, line 63 
Python Executable: C:\Python27\python.exe 
Python Version: 2.7.3 
Python Path:  
['c:\\htdocs\\rpv\\GerenDisponibilidade', 
'C:\\Python27\\lib\\site-packages\\distribute-0.6.27-py2.7.egg', 
'C:\\Python27\\lib\\site-packages\\pip-1.1-py2.7.egg', 
'C:\\Python27\\lib\\site-packages\\sphinx-1.1.3-py2.7.egg', 
'C:\\Python27\\lib\\site-packages\\docutils-0.9.1-py2.7.egg', 
'C:\\Python27\\lib\\site-packages\\jinja2-2.6-py2.7.egg', 
'C:\\Python27\\lib\\site-packages\\pygments-1.5-py2.7.egg', 
'C:\\Windows\\system32\\python27.zip', 
'C:\\Python27\\DLLs', 
'C:\\Python27\\lib', 
'C:\\Python27\\lib\\plat-win', 
'C:\\Python27\\lib\\lib-tk', 
'C:\\Python27', 
'C:\\Python27\\lib\\site-packages', 
'C:\\Python27\\lib\\site-packages\\setuptools-0.6c11-py2.7.egg-info'] 
Server time: Seg, 3 Set 2012 17:57:17 -0300 

मॉडल में विशेषता

class DiaSemana(models.Model):  
DIAS_CHOICES = (
       ("Seg", "Segunda-Feira"), 
       ("Ter", "Terça-Feira"), 
       ("Qua", "Quarta-Feira"), 
       ("Qui", "Quinta-Feira"), 
       ("Sex", "Sexta-Feira"), 
       ("Sab", "Sábado"), 
       ("Dom", "Domingo"), 
       )   
dias = models.CharField(max_length=20, choices=DIAS_CHOICES) 

यहाँ मैं, अगर वहाँ मौजूदा मूल्य है की जाँच करने के खोज अन्यथा नया बना सकते हैं और बचाने के लिए कोशिश कर रहा हूँ

for diaSemana in diaSemanas: 
     d = DiaSemana.objects.get_or_create(dias=diaSemana) 
     d.dias = diaSemana; 
     d.save() 
     c.save() 
     c.diaSemana.add(d); 

क्या गलत है?

उत्तर

26

get_or_create बस ऑब्जेक्ट प्रदान नहीं करता है:

Returns a tuple of (object, created) , where object is the retrieved or created object and created is a boolean specifying whether a new object was created.

अपने मामले d में वस्तु आप की उम्मीद के बजाय इस टपल सौंपा गया है, तो आप विशेषता त्रुटि मिलती है। आप इसे अपने कोड को बदलकर ठीक कर सकते हैं:

d, created = DiaSemana.objects.get_or_create(dias=diaSemana) 

निम्नलिखित दो पंक्तियां मेरे लिए अनावश्यक लगती हैं। ऊपर get_or_create कॉल सुनिश्चित करता है कि d.dias=diaSemana, इसलिए इसे फिर से असाइन करने की आवश्यकता नहीं है। शायद save पर कॉल करने की कोई आवश्यकता नहीं है।

d.dias = diaSemana; 
d.save() 
1

बजाय इस बंद:

dias = models.CharField(max_length=20, choices=DIAS_CHOICES) 

कार्य करें:

dias = models.CharField(max_length=20, choices=DIAS_CHOICES)[0] 

रूप @Alasdair कहा, टपल में पहले एक वस्तु

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