2010-09-08 17 views
1

J'avais lu les documents pour Appengine pour savoir comment récupérer des données de modèles. Mais il me manque quelque chose ..Appengine récupérer des données liées à la soumission de formulaire utilisateur

Mes modèles sont utilisateur et étudiant, où étudiant est une propriété de référence de l'utilisateur.

Les utilisateurs se connectent, remplissent le formulaire avec certaines valeurs et sauvegardent les données avec put(). Si vous vous connectez avec [email protected] vous obtenez vos données ou si vous vous connectez avec un autre e-mail, vous obtenez les données correspondant à vos informations envoyées à db.

Tout va bien jusqu'à ici. je essaie d'obtenir un PDF et que vous voulez obtenir les données de l'utilisateur dans loged

Exemple:.

class SavePDF(webapp.RequestHandler): 
    def post(self): 
     user = users.get_current_user() 
     if user: 
      student= models.Student.all().get() 

     p = canvas.Canvas(self.response.out) 

     p.drawImage('ipca.jpg', 40, 700) 

     p.drawString(50,640, 'Student Info:' + '%s' % student.name) 
     p.drawString(50,620, 'Adress:'     + '%s' % student.adress) 


     p.drawString(50,300, 'PDF updated:%s' %   str(datetime.date.today())) 

     p.showPage() 
     self.response.headers['Content-Type'] = 'application/pdf' 
     self.response.headers['Content-Disposition'] = 'filename=mypdf.pdf' 
     p.save() 

Ce que je reçois est un utilisateur qui n'est pas utilisateur. Affiche des informations sur un autre utilisateur. J'ai essayé différentes choses mais ça provoque des erreurs. Si j'essaie de répéter donne une erreur.

Il me manque quelque chose.

Répondre

3

Si votre modèle d'étudiant ressemble à ceci:

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

alors vous voudrez probablement quelque chose comme ceci:

user = users.get_current_user() 
if user: 
    student = models.Student.all().filter('user =', user).get() 
+0

salut, obtenir cette erreur: Traceback (dernier appel le plus récent): Fichier " C: \ Program Files \ Google \ google_appengine \ google \ appengine \ ext \ webapp \ __ init__.py ", ligne 513, dans __call__ handler.post (* groups) Fichier" C: \ Users \ Celia \ workspace \ myApp \ src \ main.py ", ligne 337, dans la publication p.drawS tring (50,640, 'Informations sur l'étudiant:' + '% s'% student.name) AttributeError: L'objet 'NoneType' n'a pas d'attribut 'name' – Martinho

+0

Désolé, l'utilisateur est défini en classe User (db.Model): – Martinho

+0

@Martin : Cela arrive parce que l'étudiant est None. À partir de votre code, cela peut arriver s'il n'y a pas d'utilisateur google connecté (ie users.get_current_user()) renvoie None, ou cela peut arriver s'il n'y a pas d'étudiant avec l'utilisateur spécifié (ie la requête renvoie None). Votre code PDF suppose qu'un étudiant valide existe - peut-être avez-vous besoin de retourner autre chose quand il n'y a pas d'étudiant valide? –