最近、App Engine に関する本の「Core Python」の章を読み、説明から入手できるブログ サンプルを実装しました。このサンプルを拡張して、ブログ投稿でコメントできるようにしようとしていますが、いくつかの問題に直面しています。
私は2つのモデルを持っています:
BlogPost (タグ、テキスト、タイムスタンプ) - タグ、テキスト、および投稿が作成された時間を格納するテーブルです。
コメント (blog_post、テキスト) - blog_post は、関連するブログ投稿にコメントを割り当てるための、BlogPost モデルへの ReferenceProperty です。
私の問題は、BlogPost キーを取得して、ユーザーが入力したコメントに正しく割り当てることです。投稿に対してクエリを実行し、そのキーを取得して、ユーザーが作成した新しいコメント (もちろん、作成された場合) に配置する必要があると考えています。しかし、現時点では、これらの手順をどのようにコーディングすればよいか (はっきりと) わかりません。
つまり、 https://developers.google.com/appengine/articles/modelingで入手できる「1 対多」の説明に関連する何かを行う必要があります。しかし、HTML フォームでユーザー入力を使用してインスタンス モデルを生成し、実装に従って行う必要があります。
以下に、現在作業中のコードを示します。助けてくれてありがとう。
//app.yaml
application: src
version: 1
runtime: python27
api_version: 1
threadsafe: true
handlers:
- url: /favicon\.ico
static_files: favicon.ico
upload: favicon\.ico
- url: .*
script: main.app
と
//main.py
import webapp2
from google.appengine.ext import db
class MainHandler(webapp2.RequestHandler):
def get(self):
self.response.out.write('''
<h1>The Blog Posts</h1>
<form action="/post" method=post>
Title:
<br><input type=text name=title>
<br>Body:
<br><textarea name=body rows=3 cols=60></textarea>
<br><input type=submit value="Post">
</form>
<hr>
''')
#posts = db.GqlQuery("SELECT * FROM BlogEntry")
posts = BlogPost.all().order('-timestamp').fetch(10)
for post in posts:
self.response.out.write('''<hr>
<strong>%s</strong><br>%s
<blockquote>%s</blockquote>''' % (
post.title, post.timestamp, post.body)
)
class BlogEntry(webapp2.RequestHandler):
def post(self):
post = BlogPost()
post.title = self.request.get('title')
post.body = self.request.get('body')
post.put()
self.redirect('/')
#model
class BlogPost(db.Model):
title = db.StringProperty()
body = db.TextProperty()
timestamp = db.DateTimeProperty(auto_now_add=True)
app = webapp2.WSGIApplication([
('/', MainHandler),
('/post', BlogEntry)
], debug=True)