2010-10-30 1 views
3

En supposant que je donne les résultats suivants:Google App Engine: Obtenir une clé d'entité à utiliser dans un modèle

class Person(db.Model): 
    name = db.StringProperty() 

Je voudrais imprimer tous les noms dans un fichier HTML à l'aide d'un modèle.

template_values = {'list': Person.all()} 

Et le modèle ressemblera à ceci:

{% for person in list %} 
<form> 
    <p>{{ person.name}} </p> 
    <button type="button" name="**{{ person.id }}**">Delete!</button> 
</form> 
{% endfor %} 

Idéalement je voudrais utiliser person.key ou person.id pour pouvoir ensuite supprimer l'enregistrement en utilisant la clé, mais qui n » Cela semble fonctionner. Des idées comment puis-je accomplir cela?

Répondre

0

Trouvé la solution dans l'un du code échantillons:

template_values = {'list': **list**(Person.all())} 

Et dans le modèle:

{% for person in list %} 
<form> 
    <p>{{ person.name}}</p> 
    <button type="button" name="**{{ person.key }}**">Delete!</button> 
</form> 
{% endfor %} 

Comme Wooble recommandé, vous pouvez essayer Person.all() fetch (some_number) à la place..

+0

liste (Blah.all()) est un anti-pattern - il va chercher les résultats par lots de 20. .fetch() est toujours le chemin à parcourir. –

6

Utilisez {{person.key.id}}, et pas seulement {{id}}. Cela appellera .key().id() méthode (s) de chaque objet. Toutefois, vous devez également savoir que le passage de Person.all() en tant que valeur de modèle n'est pas nécessairement une bonne idée; .all() renvoie un objet db.Query, qui peut être traité comme un itérable comme vous le faites mais qui effectuera plusieurs appels RPC lors de l'exécution de la requête; à la place, vous devriez utiliser quelque chose comme Person.all().fetch(SOME_NUMBER), où SOME_NUMBER est un montant raisonnable à afficher à l'utilisateur (ou un nombre arbitrairement grand si vous insistez pour essayer d'afficher tout dans une vue.)

+0

Salut J'ai essayé person.id comme je l'ai mentionné dans la question (dernière phrase) mais il a renvoyé une chaîne vide. J'ai édité le nom de la variable pour éviter toute confusion. –

+1

édité; vous avez besoin de .key(). id(); id() n'est pas du tout une méthode de l'entité. – geoffspear