在谷歌应用引擎中使用数据存储区

时间:2012-11-20 14:43:21

标签: google-app-engine google-cloud-datastore

我开始使用python 2.7在app引擎上开发,我真的很困惑数据存储区和祖先/键/父。

作为一个例子,我正在尝试开发一个包含类别,主题和响应的简单论坛。

我找不到表示关系并使用它们的方法。我已经探索并再次探索了文档,但我无法实现它。

您是否可以共享解释用于存储和获取数据的实体和查询之间关系的代码示例?

这是我在models.py中的课程

class UserInfo(db.Model):
    Email = db.EmailProperty()
    pseudo = db.StringProperty()
    UserID = db.StringProperty()

class Sujet(db.Model):
    Titre = db.StringProperty()
    Auteur = db.StringProperty()
    Date = db.DateTimeProperty(auto_now_add=True)

class Message(db.Model):
    Auteur = db.StringProperty()
    sujet = db.ReferenceProperty(Sujet, collection_name='messages')
    Date = db.DateTimeProperty(auto_now_add=True)
    Message = db.TextProperty()

我的帖子方法:

def post (self):
    UserID = users.get_current_user().user_id()
    query = UserInfo.all()
    query.filter('UserID =',UserID)
    User_query = query.get()
    Auteur = User_query.pseudo
    Titre = self.request.get('titre')

    if Titre:
        sujet = Sujet()
        sujet.Auteur = Auteur
        sujet.Titre = Titre
        sujet.put()
        message = Message()
        message.Auteur = Auteur
        message.sujet = sujet
        message.Message = self.request.get('message')
        message.put()
    else:
        sujet = Sujet.all()
        sujet = sujet.filter('Titre =',self.request.get('sujet'))
        sujet = sujet.get()
        message = Message()
        message.Auteur = Auteur
        message.sujet = sujet
        message.Message = self.request.get('message')
        message.put()

我必须采取行动。如果Titre存在则创建新的'sujet',否则创建新消息。我的问题是,当我创建一个'sujet'时,引用属性运行良好,但是当我尝试添加消息时,引用属性设置为none ...

我的html添加sujet:

<h4>Nouveau sujet</h4>
<form action="/index/forum" method="post">
    <div><input type="text" name="titre" placeholder="Titre " size="24"</div>
    <div><textarea name="message" rows="5" cols="30" size="24"></textarea></div>
    <div><input type="submit" value="Créer" class="btn"></div>
</form>

并向现有消息添加消息:

<h3>{{ sujet.Titre }}</h3>
<div>
    <form action="/index/forum" method="post">
        <div><input type="hidden" name="sujet" value="{{ sujet.Titre }} " size="24" </div>
        <div><textarea name="message" rows="5" cols="30" size="24"></textarea></div>
        <div><input type="submit" value="Répondre" class="btn"></div>
      </form>
</div>

1 个答案:

答案 0 :(得分:0)

然后下载一个正在运行的应用程序,这与您想要的非常相似:

GuestBook Example

greetings = db.GqlQuery("SELECT * FROM Greeting ORDER BY date DESC LIMIT 10")

for greeting in greetings:
  if greeting.author:
    self.response.out.write('<b>%s</b> wrote:' % greeting.author.nickname())
  else:
    self.response.out.write('An anonymous person wrote:')
  self.response.out.write('<blockquote>%s</blockquote>' %
                          cgi.escape(greeting.content))