過去,我創建了一個Django wiki,爲當前wiki條目創建一個Page表,然後將舊版本存儲到修訂表。在Google App Engine/Django上存儲wiki修訂版 - 修改此現有代碼
最近,我決定在Google App Engine上建立一個網站,並且使用了另一位程序員編寫的一些wiki代碼。因爲他使用Entities以一種複雜的方式創建了他的Page模型(至少對我來說很複雜),所以我不確定如何創建Revision表並將其與Page模型相集成。
這裏是相關的代碼。有人可以幫助我編寫修訂模型,並將修訂與頁面模型的Save方法一起保存嗎?
class Page(object):
def __init__(self, name, entity=None):
self.name = name
self.entity = entity
if entity:
self.content = entity['content']
if entity.has_key('user'):
self.user = entity['user']
else:
self.user = None
self.created = entity['created']
self.modified = entity['modified']
else:
# New pages should start out with a simple title to get the user going
now = datetime.datetime.now()
self.content = '<h1>' + cgi.escape(name) + '</h1>'
self.user = None
self.created = now
self.modified = now
def save(self):
"""Creates or edits this page in the datastore."""
now = datetime.datetime.now()
if self.entity:
entity = self.entity
else:
entity = datastore.Entity('Page')
entity['name'] = self.name
entity['created'] = now
entity['content'] = datastore_types.Text(self.content)
entity['modified'] = now
if users.GetCurrentUser():
entity['user'] = users.GetCurrentUser()
elif entity.has_key('user'):
del entity['user']
datastore.Put(entity)
順便說一句,這個代碼來自:http://code.google.com/p/google-app-engine-samples/downloads/list
我和GAE Django模型非常缺乏經驗,而我往往是很簡單的。例如,這裏是我的博客文章模型:
class Article(db.Model):
author = db.UserProperty()
title = db.StringProperty(required=True)
text = db.TextProperty(required=True)
tags = db.StringProperty(required=True)
date_created = db.DateProperty(auto_now_add=True)
您的數據模型在這裏是合理的 - 這就是我的建議,大部分。但是,如果您將頁面重新編制爲模型而不是直接使用數據存儲,則可以對頁面和修訂執行批處理,並保存數據存儲往返。 – 2009-10-19 08:36:58