django get_or_create retour d'erreur: 'tuple' objet n'a pas d'attribut
Je suis nouveau sur django et j'essaie d'utiliser get_or_create fonction de modèle, mais j'obtiens une erreur, même, j'ai l'attribut dans mon modèle
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
Modèle
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)
Ici, je suis en train de recherche pour vérifier si il existe, sinon en créer de nouveaux et de les enregistrer
for diaSemana in diaSemanas:
d = DiaSemana.objects.get_or_create(dias=diaSemana)
d.dias = diaSemana;
d.save()
c.save()
c.diaSemana.add(d);
Quel est le problème?
OriginalL'auteur dextervip | 2012-09-03
Vous devez vous connecter pour publier un commentaire.
get_or_create
n'est pas juste de retour de l'objet:Dans votre cas
d
a été attribué ce tuple à la place de l'objet que vous avez prévu, de sorte que vous obtenez l'attribut d'erreur. Vous pouvez corriger votre code en le modifiant pour:Les deux lignes suivantes look inutile pour moi. Le
get_or_create
l'appel ci-dessus garantit qued.dias=diaSemana
, donc il n'y a pas besoin de céder à nouveau. Il n'y a probablement pas besoin d'appelersave
.OriginalL'auteur Alasdair
De Documentation clairement dit que get_or_create retourne un tuple (objet, créée) - et c'est exactement l'erreur que vous voyez.
https://docs.djangoproject.com/en/dev/ref/models/querysets/#get-or-create
OriginalL'auteur jasisz
au lieu de cela:
faire:
@Alasdair dit, le premier dans le tuple est l'objet
OriginalL'auteur elad silver