dex*_*vip 15 django django-models
我是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
Run Code Online (Sandbox Code Playgroud)
模型
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)
Run Code Online (Sandbox Code Playgroud)
在这里,我试图搜索以检查是否存在现有值,否则创建新的并保存
for diaSemana in diaSemanas:
d = DiaSemana.objects.get_or_create(dias=diaSemana)
d.dias = diaSemana;
d.save()
c.save()
c.diaSemana.add(d);
Run Code Online (Sandbox Code Playgroud)
怎么了?
Ala*_*air 40
get_or_create 不只是返回对象:
返回一个元组
(object, created),其中object是检索或创建的对象,并且创建的是一个布尔值,指定是否创建了新对象.
在你的情况下d已经分配了这个元组而不是你期望的对象,所以你得到属性错误.您可以通过将代码更改为:来修复代码:
d, created = DiaSemana.objects.get_or_create(dias=diaSemana)
Run Code Online (Sandbox Code Playgroud)
我不需要以下两行.get_or_create上面的调用确保了d.dias=diaSemana,因此不需要再次分配它.可能没有必要打电话save.
d.dias = diaSemana;
d.save()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
16377 次 |
| 最近记录: |