Estoy escribiendo una aplicación de lista de tareas pendientes para ayudarme a comenzar con Python. La aplicación se ejecuta en GAE y estoy almacenando elementos de tareas pendientes en el almacén de datos. Quiero mostrarles los artículos de todos, y solo a ellos. El problema es que la aplicación actualmente muestra todos los elementos a todos los usuarios, así que puedo ver lo que escribes y tú ves lo que escribo. Pensé que lanzar mi objeto todo.author a una cadena y ver si coincide con el nombre del usuario sería un buen comienzo, pero no sé cómo hacerlo.
Esto es lo que tengo en mi 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('/')
En mi index.html tenía esto originalmente:
<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>
pero me gustaría mostrar elementos solo al usuario que los creó. Pensé en intentarlo
{% for todo in todos %}
{% ifequal todo.author nickname %}
<input type="checkbox"> {{todo.item}} <hr />
{% endifequal %}
{% endfor %}
en vano. La lista aparece en blanco. Supuse que es porque todo.author no es una cadena. ¿Puedo leer el valor como una cadena o puedo convertir el objeto en String?
¡Gracias!
Editar: Aquí está mi clase de Todo
class Todo(db.Model):
author = db.UserProperty()
item = db.StringProperty()
completed = db.BooleanProperty()
date = db.DateTimeProperty(auto_now_add=True)
¿Cambiar mi autor a StringProperty afectará algo negativamente? Quizás pueda renunciar al casting por completo.

TemplateSyntaxError: Could not parse the remainder: '(todo.author)' from 'str(todo.author)'alguna idea?'str(todo.author)'como tal. No tengo experiencia con las plantillas de Django, pero parece que su mecanismo de análisis se bloquea en el paréntesis después delstrnombre de la función. O puede que prefiera obtener la propiedad de cadena del autor, posiblemente algo asítodo.author.nickname, sin la necesidad de lastr()llamada.En Python podemos usar el
__str__()método.Podemos anularlo en nuestra clase de esta manera:
class User: firstName = '' lastName = '' ... def __str__(self): return self.firstName + " " + self.lastNamey al correr
llamará a la función
__str__(self)e imprimirá el nombre y apellidofuente
str()es el equivalente.Sin embargo, debería filtrar su consulta. Por el momento tu consulta es de
all()Todo.todos = Todo.all().filter('author = ', users.get_current_user().nickname())o
todos = Todo.all().filter('author = ', users.get_current_user())dependiendo de lo que esté definiendo autor como en el modelo Todo. A
StringPropertyoUserProperty.La nota
nicknamees un método. Está pasando el método y no el resultado en valores de plantilla.fuente
Debe definir el
__unicode__método en su modelo y la plantilla lo llamará automáticamente cuando haga referencia a la instancia.fuente
En función post ():
Entonces, para obtener str (todo.author), necesitas str (users.get_current_user ()). ¿Qué devuelve la función get_current_user ()?
Si es un objeto, verifique si contiene una función str () "?
Creo que el error está ahí.
fuente