Python 是否有一个 toString()等价物,我可以将类转换为 String 吗?

我正在编写一个 ToDo 列表应用程序来帮助自己开始使用 Python。这个应用程序在 GAE 上运行,我在数据库中存储待办事项。我想把每个人的物品都展示给他们,而且只展示给他们。问题是这个应用程序目前向所有用户显示所有条目,所以我可以看到你写了什么,你也可以看到我写了什么。我认为将 todo.author 对象转换为字符串并查看它是否与用户名匹配将是一个很好的开始,但我不知道如何做到这一点。

这是我主要的东西

...
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('/')

在我的 index.html 中,最初是这样的:

<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>

但我希望只向创建它们的用户显示项目

{% for todo in todos %}
{% ifequal todo.author nickname %}
<input type="checkbox"> {{todo.item}} <hr />
{% endifequal %}
{% endfor %}

无济于事。名单是空的。我假设这是因为 todo.author 不是字符串。我可以将值读出为字符串,还是将对象强制转换为 String?

谢谢!

编辑: 这是我的 Todo 类

class Todo(db.Model):
author = db.UserProperty()
item = db.StringProperty()
completed = db.BooleanProperty()
date = db.DateTimeProperty(auto_now_add=True)

将我的作者更改为 StringProperty 会产生什么负面影响吗? 也许我可以完全放弃强制转换。

295503 次浏览

str()相当于。

然而,您应该过滤您的查询。目前,您的查询是 all() Todo 的。

todos = Todo.all().filter('author = ', users.get_current_user().nickname())

或者

todos = Todo.all().filter('author = ', users.get_current_user())

取决于您在 Todo 模型中定义的作者。

注意 nickname是一个方法。您传递的是方法而不是模板值中的结果。

在 python 中,str()类似于其他语言中的 toString()方法。它被称为传递要转换为字符串的对象作为参数。在内部,它调用参数对象的 __str__()方法以获得其字符串表示形式。

但是,在这种情况下,您将从数据库中比较 UserProperty作者,它的类型是 users.User和昵称字符串。您需要将作者的 nickname属性与模板中的 todo.author.nickname进行比较。

您应该在模型上定义 __unicode__方法,当您引用实例时,模板将自动调用它。

在职能岗位() :

todo.author = users.get_current_user()

因此,要获取 str (todo.author) ,需要 str (users.get _ current _ user ())函数返回什么?

如果它是一个对象,检查它是否包含一个 STR()”函数?

我认为错误就在这里。

在 Python 中,我们可以使用 __str__()方法。

我们可以在类中重写它,如下所示:

class User:
def __init__(self):
self.firstName = ''
self.lastName = ''
...
        

def __str__(self):
return self.firstName + " " + self.lastName

跑步的时候

print(user)

它将调用函数 __str__(self)并打印 firstName 和 lastName

另一种方法是使用 __dict__特殊属性,例如:

str(user.__dict__)

或者

print(user.__dict__)

有关特殊属性 给你的详细信息