python - 无法在代码中访问 UserProperty 的成员

标签 python google-app-engine

我是 Google Apps 新手,一直在摆弄 Google 应用网站上列出的 hello world 应用。完成应用程序后,我决定尝试对其进行扩展。我添加的第一件事是允许提交留言的用户过滤留言簿帖子的功能。

我所更改/添加的只是 WSGIApplication 的处理程序以及该处理程序的新类。型号是一样的,我发一下供引用:

class Greeting(db.Model):
    author = db.UserProperty()
    content = db.StringProperty(multiline = True)
    date = db.DateTimeProperty(auto_now_add=True)

使用 Django 模板,我更改了显示作者昵称的行:

<b>{{ greeting.author.nickname }}</b> wrote:

至:

<a href="/authorposts/{{ greeting.author.user_id }}">
  {{ greeting.author.nickname }}
</a></b> wrote:

我遇到的问题是,在我的 python 代码中,我无法访问“greeting.author.nickname”或任何其他属性,例如“user_id”。不过,可以从 Django 模板访问它们,因为我上面列出的模板代码可以正常工作,并正确创建指向作者的链接并显示昵称。

我正在使用基于作者(UserProperty)属性“user_id”的 URL 映射。我正在尝试找到一种可以使用 user_id 作为条件来过滤数据存储的方法。我尝试直接对查询应用过滤器,尝试提取所有记录,然后迭代它们并使用 If...Else 子句。

我知道该值已存储到数据存储中,因为 Django 模板显示了它,我需要做什么才能将其用作过滤条件?

最佳答案

查询Greeting时模型,您无法过滤 Greeting.author 内的字段 (例如 greeting.author.nickname )。在 SQL 中,这可以通过对 Greeting 进行联接来完成。和User表。但是,在 GAE 中,您只能查询直接包含在您正在查询的模型中的属性。

authordb.UserProperty ,您可以按用户进行过滤,如下所示:

# fetch up to 10 greetings by the current user
user = users.get_current_user()
results = Greeting.all().filter('author =', user).fetch(10)

过滤的其他字段 author ,您需要对 Greeting 进行非规范化模型 - 即,在 author 中添加字段的副本您希望能够过滤 Greeting在。例如,如果您想按 author.nickname 进行过滤,您将添加 author_nickname字段到您的Greeting模型(并使其值与 author.nickname 保持同步):

class Greeting(db.Model):
    author = db.UserProperty()
    author_nickname = db.StringProperty() # denormalization (copy of author.nickname)
    content = db.StringProperty(multiline = True)
    date = db.DateTimeProperty(auto_now_add=True)

如果您将这种非规范化添加到模型中,使用 Nick Johnson 的 aetycoon library 可能会有所帮助。制作author_nickname每当author更新已更新(这样您就不必手动强制执行该关系)。

关于python - 无法在代码中访问 UserProperty 的成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3327958/

相关文章:

python - 如何检查 Python 集合是否已订购?

python - 包含多值条目的二等分列表?关于完成此任务的建议

PHP 搜索引擎与 MySQL 数据库中的特定术语不匹配

python - AppEngine Pipeline Yield - 这是 yield 运算符的标准用法吗?

java - 在调试时在本地主机上的 Eclipse App Engine Standard 上运行多模块 Java App Engine (EAR) 应用程序

python - Plone 将 Blob 数据迁移到 "bushy"布局 IOError Errno 21

python - labelEncoder在sklearn中的工作

python - 对元组列表中的值求和并按工作日排序

python - Google App Engine cron 作业失败并出现 404 错误

java - GWT 主页登录页面到实际应用程序示例重定向问题