Сделка по собственности объекта GAE - PullRequest
0 голосов
/ 27 августа 2010

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

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

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

Спасибо!


Модели:

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

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

голосование класса (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('/', { })

View

a href = "/ voice" {{url.votes}} голосов - {{url.website}}

Ответы [ 2 ]

1 голос
/ 28 августа 2010

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

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

a href = "/ voice? 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 голосов
/ 28 августа 2010

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

a href = "/ voice *? Id = {{url.votes.key.id}} *" {{url.votes}} голосов - {{url.website}}

...