2010-08-27 2 views
0

Я пытаюсь создать функцию голосования, которая увеличивает класс URL.votes +1 при нажатии. Это вопрос с двумя частями:Сделка по объекту объекта GAE

  1. Как вы тянете ключ сущности? (Мне кажется, вам нужен ключ, чтобы отличить, какое свойство голосования изменяется?)

  2. Как вы тогда пишете 'a href' для ссылки для голосования?

Спасибо!


Модели:

класс URL (db.Model):

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

класс 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) 

Контроллер

класс VoteHandler (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('/', { }) 

Посмотреть

A HREF = "/ голос" {{}} url.votes голосов - {{}} url.website

ответ

1

Ответ включает в себя несколько вещей:?

  1. Вы должны использовать строку запроса для передачи данных на для VoteHandler

A HREF = "/ голос url_id = {{URL .key.id}} "> {{url.votes}} голосов - {{url.website}} - {{url.user.account}} - {{url.created | date:" M d, Y "}}

  1. Нажав на ссылку для голосования, вы получите() не сообщение(). Затем вы используете model.get_by_id()

класса 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

Вы можете использовать url.votes.key.id в вашем View

A HREF = "/ проголосуй *? ID = {{url.votes.key.id}} * {{"} url.votes } голосов - {{url.website}}

+0

ок большое спасибо – Emile