2012-11-20 9 views
-1

Je commence à développer sur le moteur de l'application avec python 2.7 et je suis vraiment confus avec le datastore et les ancêtres/keys/parents. Par exemple, j'essaye de développer un forum simple avec des catégories, des sujets et une réponse.Utilisation de datastore dans google app engine

Je ne trouve pas le moyen de représenter une relation et de l'utiliser. J'ai exploré et exploré à nouveau la documentation, mais je ne peux pas l'implémenter. Pouvez-vous partager un exemple de code expliquant les relations entre l'entité et la requête que vous utilisez pour stocker et obtenir des données?

C'est ma classe dans 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() 

Ma méthode post:

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() 

Je dois agir. Créer un nouveau sujet si Titre existe ou un nouveau message sinon. Mon problème est que lorsque je crée un « sujet » la propriété de référence fonctionne bien, mais lorsque je tente d'ajouter un message, la propriété de référence est none ...

mon html pour ajouter un 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> 

Et d'ajouter un message à un existant:

<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> 
+2

Quel code avez-vous essayé? Pourquoi ça ne marche pas? –

+0

vous suggère d'acheter un livre, cela couvre exactement ce que vous demandez dans un format de tutoriel: http://www.amazon.co.uk/Code-Cloud-Pragmatic-Programmers-Chu-Carroll/dp/1934356638/ref= sr_1_2? ie = UTF8 & qid = 1353423917 & sr = 8-2 –

Répondre

0

Télécharger une application de travail puis, ce qui est très similaire à ce que vous voulez:

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)) 
+0

Oui c'est la base, mon problème est plus sur les relations, et la façon de filtrer sur les entités avec la relation avec les autres. – Saturnain

+0

Ensuite, vous n'avez pas de chance car il n'y a pas de meilleure documentation que la documentation officielle. https://developers.google.com/appengine/docs/python/datastore/entities#Ancestor_Paths https://developers.google.com/appengine/docs/python/datastore/queryclass#Query_ancestor –

Questions connexes