2010-08-27 5 views
0

J'essaie de créer une fonction de vote qui augmente la classe URL.votes +1 lorsqu'elle est cliquée. C'est une question en deux parties:Transaction sur la propriété d'entité GAE

  1. Comment tirez-vous la clé d'entité? (Je pense que vous avez besoin de la clé pour distinguer quelle propriété vote est en cours de modification?)

  2. Comment écrivez-vous ensuite le 'a href' pour que le lien effectue le vote?

Merci!


Modèles:

URL classe (db.Model):

user = db.ReferenceProperty(User) 
website = db.StringProperty() 
created = db.DateTimeProperty(auto_now=True) 
votes = db.IntegerProperty(default=1) 

classe Vote (db.Model):

user = db.ReferenceProperty(User) #See if voted on this site yet 
url = db.ReferenceProperty(URL) #To apply vote to right URL 
upvote = db.IntegerProperty(default=1) 
created = db.DateTimeProperty(auto_now=True) 

Contrôleur

VoteHandler classe (webapp.RequestHandler):

def get(self): 
    doRender(self, 'base/index.html') 

def post(self): 

    #See if logged in 
    self.Session = Session() 
    if not 'userkey' in self.Session: 
     doRender(
      self, 
      '/', 
      {'error' : 'Please login to vote'}) 
     return 

    #Get current vote total 

    url = db.URL.get() #pull current site. This is where I think I need the help 
    url.votes += 1 #pull current site vote total & add 1 
    url.put(); 

    logging.info('Adding a vote'+nurl) 

    #Create a new Vote object 
    newvote = models.Vote(user=self.Session['userkey'], url=url) 
    newvote.put(); 

    self.get(); 

    self.redirect('/', { }) 

Voir

a href = "/ vote" {{}} url.votes votes - {{}} url.website

Répondre

1

La réponse comprend un certain nombre de choses:

  1. Vous devez utiliser une chaîne de requête pour transmettre les données sur le VoteHandler

a href = "/ vote URL_ID = {{url .key.id}} "> {{url.votes}} votes - {{url.website}} - {{url.user.account}} - {{url.created | date:" M d, Y "}}

  1. Cliquer sur un lien de vote, est un get() pas un post(). Ensuite, vous utilisez model.get_by_id()

classe VoteHandler (webapp.RequestHandler):

def get(self): 
    #See if logged in 
    self.Session = Session() 
    if not 'userkey' in self.Session: 
     doRender(
      self, 
      'base/index.html', 
      {'error' : 'Please login to vote'}) 
     return 

    #Get current vote total 
    key = self.request.get('url_id') 
    vurl = models.URL.get_by_id(int(key)) 
    vurl.votes += 1 #pull current site vote total & add 1 
    vurl.put(); 

    logging.info('Adding a vote') 

    #Create a new Vote object 
    newvote = models.Vote(user=self.Session['userkey'], url=vurl) 
    newvote.put(); 

    self.redirect('/', { }) 
0

Vous pouvez utiliser url.votes.key.id dans votre Voir

a href = "/ vote *? id = {{url.votes.key.id}} * {{" url.votes} } votes - {{url.website}}

+0

ok grand merci – Emile