2010-09-16 11 views
0

J'ai des problèmes avec mon projet. J'ai 2 modèlesAppengine - comment obtenir une entité et afficher des valeurs

class UserPrefs(db.Model): 
    user = db.UserProperty() 
    name = db.StringProperty() 

class Person(db.Model): 
    name = db.StringProperty() 
    phone = db.PhoneNumberProperty() 
    userPrefs = db.ReferenceProperty(UserPrefs) 

class PersonHandler(webapp.RequestHandler): 
    def get(self): 
     users.get_current_user user =() 
     if user: 
      greeting = ...... 
     else: 
      greeting = ...... 

     if self.request.GET.has_key ('id'): 
      id = int (self.request.get ['id']) 
      person = models.Person.get = (db.Key.from_path ('Person', id)) 

      path = os.path.join (os.path.dirname (__file__), 'templates/doStuff.html') 
      self.response.out.write (template.render (path, locals(), debug = True)) 

     def post (self): 
      if self.request.get ('Person'): 
       id = int (self.request.get ('Person')) 
       person = models.Person.get (db.Key.from_path ('Person', id)) 
      else: 
       person= models.Person =() 

      data = forms.PersonForm date = (data = self.request.POST) 
      if data.is_valid(): 
       if self.request.get ('photo'): 
        Person.foto db.Blob = (self.request.get ('photo')) 

       person.nome self.request.get = ('name') 
       person.apelido self.request.get = ('name') 
       person.unidade self.request.get = ('unit') 

       person.put() 
       self.redirect ('/ doSomeStuff') 
      else: 
       self.redirect ('doOtherStuff') 

To See the data in database i use this handler: 
class SeePersonHandler (webapp.RequestHandler): 
    def get (self): 
     users.get_current_user user =() 
     if user: 
      greeting = ...... 
     else: 
      greeting = ...... 

     person= db.Query(models.Pocente) 
     persons = person.fetch(limit = 1) 

     path = os.path.join(os.path.dirname(__file__), 'templates/SeeStuff.html') 
     self.response.out.write(template.render(path, locals(), debug = True)) 

Question: Je sait que les données sont mises corectly. J'ai utilisé la console SDK avec cet url: http://localhost:8080/_ah/admin/datastore et l'entité est créée correctement. Je ne pas savoir ce que je suis absent pour récupérer le dadta déjà mis

Mon modèle:

{% if user %} 
    {% if person%} 
    <table align="center"> 
    <tbody> 
    <tr> 
     <td><input type="button" value="Criar Pessoa" onclick="redirect(3)" /></td> 
    </tr> 
    </tbody> 
    </table> 
    <table align="center"> 
    <tbody> 
    <tr> 
     <td colspan="2"><center><strong><p>O meu Curriculum Vitae</p></strong></center></td> 
    </tr> 
    <tr> 
     <td>Nome: </td> 
     <td>{{ person.name}}</td> 
    </tr> 
    <tr> 
     <td>Apelido: </td> 
     <td>{{ person.phone}}</td> 
    </tr> 
    <tr> 
     <td></td> 
     <td> 
     <input type ="button" value="Editar" onclick="editarCv({{ person.key.id }})" /> 
     </td> 
    </tr> 
    </tbody> 
    </table> 
    {% endif %} 
{% endif %} 

Répondre

0

Votre code est un peu désorganisé.
Le débogage est généralement plus facile avec un code mieux organisé.

De toute façon, assez de la poubelle.
Nous assignons le résultat d'une requête datastore persons ...

persons = person.fetch(limit = 1) 

... mais dans votre modèle que vous utilisez person:

<tr> 
    <td>Nome: </td> 
    <td>{{ person.name}}</td> 
</tr> 
<tr> 
    <td>Apelido: </td> 
    <td>{{ person.phone}}</td> 
</tr> 

Il est difficile de dire si cette est votre seul problème (j'en doute fortement), mais peut-être que vous pouvez essayer de régler cela et revenir à nous. Bonne chance à vous.

En plus: au lieu de .fetch(limit=1) vous pouvez simplement utiliser .get() comme mentionné dans the documentation:

get() implies a "limit" of 1. At most 1 result is fetched from the datastore.

+0

Merci Adam. Ça a marché. Maintenant, lorsque j'essaie de modifier les informations, j'obtiens cette erreur: Fichier "C: \ Users \ hp \ espace de travail \ AnApp \ src \ main.py", ligne 173, dans get id = int (self.request.get [ 'id']) TypeError: l'objet 'instancemethod' est inscriptible –

+0

Ce qui est bizarre, c'est que l'erreur se réfère à un gestionnaire que j'utilise pour mettre les informations comme: si self.request.GET.has_key ('id'): id = int (self.request.get ['id']) list_Person = models.Person.get (db.Key.from_path ('Personne', id)) –

+0

Désolé pour demander ceci. J'étais bête. Mon erreur était d'obtenir à la place de GET. –

Questions connexes