【问题标题】:Google app engine ReferenceProperty view won't post/saveGoogle 应用引擎 ReferenceProperty 视图不会发布/保存
【发布时间】:2013-10-08 20:08:29
【问题描述】:

这是我的模型和观点。我是 App Engine 的新手,我正在尝试创建一个与 profiletitle 相关的新语言集。我已经阅读了大量的帖子/文档,但找不到一个很好的功能视图代码示例。

models.py

class AddProfile(db.Model):
    profiletitle = db.StringProperty(required=True)


class AddLang(db.Model):
    profile = db.ReferenceProperty(AddProfile, required=True)
    language = db.StringListProperty()
    date = db.DateTimeProperty(auto_now_add=True)

views.py

class CreateLang(BaseHandler):

    def post(self):
        n = AddLang(
        profile = self.request.get('profile'),
        language = self.request.get('language').split(', '))
        n.put()
        return webapp2.redirect('/')

    def get(self):
        self.render_template('create.html', {})

更新的 view.py - 现在将数据存储在数据存储中

class CreateLang(BaseHandler):

    def post(self):
        n = AddLang(
        profile = AddProfile.all().filter('profiletitle', self.request.get('profile')).get(),
        language = self.request.get('language').split(', '))
        n.put()
        return webapp2.redirect('/')

    def get(self):
        self.render_template('create.html', {})

创建.html

<!DOCTYPE html>

<html>
<body>
<form action="" method="post">
  <div class="field-wrapper">

    <div class="field-label">
      <label for="id_profile">Profile</label>:
    </div>

    <div class="field-field">
      <input type="text" name="profile" id="id_profile" />

    </div>

 </div>

  <div class="field-wrapper">

    <div class="field-label">
      <label for="id_language">Language</label>:
    </div>

    <div class="field-field">
      <input type="text" name="language" id="id_language" />

    </div>

</div>
  <br>
  <input type="submit" value=submit />
</form>

当我尝试发布/保存数据时,我收到以下错误。我相信这是因为我需要使用 get 来调用模板中选择的 profiletitle 的特定 id。

注意:我没有使用表单 py,我有一个简单的 html 模板。如果您有任何问题或需要查看模板,请告诉我。感谢阅读/帮助。

     ![datastore snip]:(http://imm.io/1hTVN)

 Error Message
     if value is not None and not value.has_key():

 AttributeError: 'unicode' object has no attribute 'has_key'

【问题讨论】:

    标签: python google-app-engine referenceproperty


    【解决方案1】:

    在 POST 中准确显示您发送的内容会很有帮助。但假设您要发送个人资料标题,您确实需要获取它:

    profile = AddProfile.all().filter('profiletitle', self.request.get('profile')).get()
    

    现在您可以使用该配置文件对象来创建您的 AddLang:

    lang = AddLang(profile=profile, language=language)
    lang.put()
    

    【讨论】:

    • 谢谢丹尼尔。我已经阅读了您在 Stack 上的许多帖子。它现在将数据存储在数据存储中,并对视图进行以下更新。我将在上面添加模板代码和图像。图像中覆盖配置文件的键是什么?
    • 我不确定你在问什么:这正是你想要的,被引用的 Profile 实体的键。
    • 是的,我通读了文档,显然它运行正常。我需要弄清楚查询以按 profiletitle 对表进行排序。如果钥匙不在那里并且条目的实际标题是,那会更简单。示例:前端等。再次感谢您的所有帮助。
    • 这表明您正在考虑传统的关系数据库。数据存储不是一个,不应该这样对待。使用数据存储,您不能进行 JOIN,也不能按相关属性的值进行排序。
    • 你是对的!我来自 django/mysql。有没有办法做到这一点。返回数据存储文档.......
    猜你喜欢
    • 2010-11-15
    • 2012-06-21
    • 2011-05-02
    • 1970-01-01
    • 1970-01-01
    • 2011-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多