2012-09-03 79 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說,在元組中的第一個是對象

相關問題