2012-09-13 1 views
0

Je travaille sur un site web avec Django.Les mots-clés de Filter() doivent être des chaînes

J'ai créé deux modèles, un pour la photo et l'autre pour une personne.

class Photo(models.Model):  
    photo = models.ImageField(upload_to = 'toto') 
    description = models.CharField(_('Description'), max_length = 250) 
    people = models.ManyToManyField('Person', related_name = _('Person')) 

    def display_img(self): 
     return u'<img src="%s" /> - %s - %s' % (self.photo, self.description, self.people) 

    display_img.allow_tags = True 

class Person(models.Model): 
    name = models.CharField(_('Name'), max_length = 50) 

Dans mon esprit ce que je veux est de pouvoir étiqueter des personnes sur une photo.

Mon problème est que je suis en mesure de créer une nouvelle photo avec le admin, mais quand je veux modifier/voir (http://127.0.0.1:8000/admin/module/photo/1/) Je reçois cette erreur:

Django Version: 1.4.1 
Exception Type: TypeError 
Exception Value:  
filter() keywords must be strings 
Exception Location: C:\Python26\Lib\site-packages\django\db\models\fields\related.py in get_query_set, line 543 

et je Je ne suis pas capable de le comprendre.

Répondre

1

La pleine retraçage aurait été utile.

Je prévois que le problème provient de l'attribut related_name dans votre champ people. Vous avez marqué cela pour la traduction, mais cela n'a aucun sens: c'est un attribut que vous utilisez dans votre code, pas quelque chose pour la consommation publique. Prenez l'appel _().

+0

Merci beaucoup pour votre réponse, ça résout le problème! Vous êtes un génie! Ma compréhension de related_name était incorrecte. Je vais revenir à la documentation. La prochaine fois je vais donner la retraçage;) Merci beaucoup – trnsnt

0

photo est l'objet, mais vous voulez obtenir ce que str:

return u'<img src="%s" /> - %s - %s' % (self.photo, self.description, self.people) 

Vous devez url attr:

return u'<img src="%s" /> - %s - %s' % (self.photo.url, self.description, self.people) 

Ma solution à propos people:

people = models.ManyToManyField(PersonModel, related_name = _('Persons'), verbose_name=_('Person')) 
+0

Merci beaucoup pour votre réponse. Il ne résout pas le problème, mais il résout un autre problème que j'ai à propos de l'affichage de l'image. Sans cela, l'image n'était pas affichée. Merci – trnsnt

Questions connexes