0

これが私のモデルとビューです。私は 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)

ビュー.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', {})

create.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'
4

1 に答える 1

1

POST で何を送信しているかを正確に示すと役に立ちます。ただし、プロファイル タイトルを送信する場合は、それを取得する必要があります。

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

これで、そのプロファイル オブジェクトを使用して AddLang を作成できます。

lang = AddLang(profile=profile, language=language)
lang.put()
于 2013-10-08T21:40:12.210 に答える