Python ont une toString() équivalent, et puis-je convertir un db.Élément de modèle de Chaîne de caractères?
Je suis en train d'écrire une liste de choses à faire application pour m'aider à débuter avec Python. L'application est en cours d'exécution sur GAE et je suis stocker les éléments todo dans le Magasin de Données. Je veux afficher tous les éléments à eux, et à eux seuls. Le problème est que l'application affiche tous les éléments de tous les utilisateurs, afin que je puisse voir ce que vous écrivez, et vous voyez ce que j'écris. Je pensais que la coulée de ma todo.auteur objet d'un string et de voir si elle correspond au nom de l'utilisateur serait un bon début, mais je ne peux pas comprendre comment le faire.
C'est ce que j'ai dans mon main.py
...
user = users.get_current_user()
if user:
nickname = user.nickname()
todos = Todo.all()
template_values = {'nickname':nickname, 'todos':todos}
...
def post(self):
todo = Todo()
todo.author = users.get_current_user()
todo.item = self.request.get("item")
todo.completed = False
todo.put()
self.redirect('/')
Dans mon index.html j'ai eu cette origine:
<input type="text" name="item" class="form-prop" placeholder="What needs to be done?" required/>
...
<ul>
{% for todo in todos %}
<input type="checkbox"> {{todo.item}} <hr />
{% endfor %}
</ul>
mais j'aimerais afficher seulement les objets de l'utilisateur qui les a créés. J'ai pensé à essayer de
{% for todo in todos %}
{% ifequal todo.author nickname %}
<input type="checkbox"> {{todo.item}} <hr />
{% endifequal %}
{% endfor %}
en vain. La liste tourne à vide. J'ai supposé que c'est parce que todo.l'auteur n'est pas une chaîne. Puis-je lire la valeur comme une chaîne de caractères, ou puis-je convertir l'objet en String?
Merci!
Edit: Voici ma Todo classe
class Todo(db.Model):
author = db.UserProperty()
item = db.StringProperty()
completed = db.BooleanProperty()
date = db.DateTimeProperty(auto_now_add=True)
Volonté de changer mon auteur d'un StringProperty effet quelque chose de négatif? Peut-être que je peux renoncer casting tout à fait.
Vous devez vous connecter pour publier un commentaire.
En python, le
str()
méthode est similaire à latoString()
méthode dans d'autres langues. Il est appelé le passage de l'objet à convertir une chaîne de caractères en paramètre. En interne, il appelle la__str__()
méthode de l'objet parameter pour obtenir sa représentation sous forme de chaîne.Dans ce cas, cependant, vous comparez un
UserProperty
l'auteur à partir de la base de données, qui est de typeutilisateurs.Utilisateur
avec le surnom de chaîne. Vous souhaitez comparer lenickname
propriété de l'auteur et non avectodo.author.nickname
dans votre modèle.TemplateSyntaxError: Could not parse the remainder: '(todo.author)' from 'str(todo.author)'
des idées?'str(todo.author)'
comme si. Je ne suis pas expérimenté avec des modèles Django, mais il semble que son analyse mécanisme est de rester bloqué jusqu'à la parenthèse après lestr
nom de la fonction. Ou vous pourriez plutôt la chaîne de la propriété de l'auteur, peut-être quelque chose commetodo.author.nickname
, sans la nécessité pour lestr()
appel.str()
est l'équivalent.Cependant, vous devriez être filtrage de votre requête. Au moment de votre requête est
all()
Todo.ou
en fonction de ce que vous êtes à la définition de l'auteur comme dans la Todo modèle. Un
StringProperty
ouUserProperty
.Note
nickname
est une méthode. Vous êtes de passage à la méthode et non pas le résultat dans des valeurs de modèle.Vous devez définir les
__unicode__
méthode de votre modèle, et le modèle s'appeler automatiquement lorsque vous faites référence à l'instance.En fonction de post():
Donc, pour obtenir str(todo.auteur de), vous devez str(les utilisateurs.get_current_user()). Ce qui est retourné par get_current_user() la fonction ?
Si c'est un objet, vérifiez qu'il ne contient un str()" fonction?
Je pense que l'erreur est là.