Django: l'accès aux attributs de modèle
Excuses pour le noobish question, je suis complètement nouveau pour Python et Django et d'essayer de faire ma première application.
J'ai une classe simple
class About(models.Model):
title = models.CharField(max_length=200)
description = models.TextField()
date = models.DateTimeField('date added')
à laquelle j'ai ajouté un enregistrement unique. Je peux accéder à ce avec
about = About.objects.filter(id=1)
cependant, si j'essaie d'utiliser la syntaxe à point pour accéder à ses attributs, j'obtiens l'erreur suivante
>>> about.title
Traceback (most recent call last):
File "<console>", line 1, in <module>
AttributeError: 'QuerySet' object has no attribute 'title'
Je sais comment utiliser l'unicode dans le modèle pour spécifier une meilleure valeur de retour comme
def __unicode__(self):
return self.title
dois-je utiliser ce format le modèle de données dans un dictionnaire/liste? Ou suis-je complètement à côté de certains comportement par défaut?
OriginalL'auteur igniteflow | 2011-04-24
Vous devez vous connecter pour publier un commentaire.
Dans votre cas,
about
est un Objet QuerySet, pas une instance de votre modèle. EssayezVous pouvez également utiliser get() pour récupérer une instance unique du modèle:
OriginalL'auteur Blair
Filtre retourne un QuerySet et pas le seul objet que vous recherchez. Utiliser obtenir à la place du filtre.
Méthodes qui retournent des nouvelles QuerySets
Méthodes qui ne font pas de retour QuerySets
http://docs.djangoproject.com/en/dev/ref/models/querysets/
OriginalL'auteur Pickels
Comme la documentation explique,
filter
toujours retourne un QuerySet, qui est une forme de liste de la collection d'éléments, même si un seul élément correspond à la condition de filtre. Donc, vous pouvez découper la liste pour accéder à votre élément -about[0]
- ou, mieux, utiliserget()
à la place:OriginalL'auteur Daniel Roseman
Si vous souhaitez obtenir juste une ligne
maintenant
about
est un objet(une ligne)filter
retourne la liste, donc pour accéder aux éléments de la liste que vous devez utiliserindex
(environ[0]) oufor loop
.maisget
renvoyer qu'une seule ligne.OriginalL'auteur Alireza Savand