Используйте поле формы в качестве ключа объекта Python Google App Engine - PullRequest
0 голосов
/ 04 октября 2011

У меня есть форма, где пользователь входит в систему с учетной записью Google, а затем создает или обновляет свой профиль в Google App Engine.Я хочу использовать поле формы, содержащее адрес электронной почты (который автоматически заполняется информацией о пользователе из Google), в качестве ключа новой записи.Таким образом, я могу легко обновить записи, поскольку, если они имеют одинаковый адрес электронной почты, они будут одной и той же записью.Вот моя модель формы и моя страница пост и методы получения, как я могу изменить их, чтобы установить ключ?

class Athlete(db.Model):                                         
    #fields to be added to the form
    norse_key = db.UserProperty()
    key_name = norse_key
    first_name = db.StringProperty()
    last_name = db.StringProperty()
    school_class = db.StringProperty()
    sex = db.StringProperty()
    home_address = db.StringProperty()
    city = db.StringProperty()
    state = db.StringProperty()
    zip = db.IntegerProperty()
    residence = db.StringProperty()
    SPO = db.IntegerProperty()
    cell = db.IntegerProperty
    sport_1 = db.StringProperty()
    sport_2 = db.StringProperty()
    sport_3 = db.StringProperty()

class AthleteForm(djangoforms.ModelForm):
    class Meta():
        model = Athlete()
class AthleteFormPage(webapp.RequestHandler):

    def get(self):
        user = users.get_current_user()
        self.response.out.write((user))
        query = db.GqlQuery("SELECT * FROM Athlete WHERE norse_key = :1", user)
        item = None
        for item in query:
            self.response.out.write("%s,%s<br>" % (item.norse_key,item.first_name))    
        self.response.out.write('<div style="float:right"><a href="%s">Log Out</a> </div >'% (users.create_logout_url("/")))

        self.response.out.write('<html> <body> <a href="/">Submit A Treatment Log</a>  <form method="POST" action="/athleteformpage.html"> <table>')
        if item != None:
            self.response.out.write(AthleteForm(initial={'norse_key':item.norse_key,'first_name':item.first_name}))
        else:
            self.response.out.write(AthleteForm(initial={'norse_key':user}))
        self.response.out.write('</table> <input type="submit"> </form> </body> </html>')


    def post(self):
        data = AthleteForm(data=self.request.POST)
        if data.is_valid():
            # Save the data, and redirect to the view page
            entity = data.save(commit=False)
            entity.added_by = users.get_current_user()
            entity.put()
            self.redirect('/athletes.html')
        else:
            # Reprint the form
            self.response.out.write('<html><body> <form method="POST" action="/athleteformpage.html"> <table>')
            self.response.out.write(data)
            self.response.out.write('</table> <input type="submit"> </form></body></html>')

1 Ответ

2 голосов
/ 04 октября 2011

Каждый объект в хранилище данных GAE имеет ключ, ключ может быть идентификатором или строкой.
При создании объекта вы можете указать, какое значение будет иметь ключ, используя атрибут key_name.например:

Athlete.get_or_insert(key_name=name, ....)

Вы можете удалить имя ключа, которое вы указали в своей модели, и использовать то, которое выходит "из коробки"

, чтобы запросить объект, используя имя ключаAthlete.get_by_key_name(name).
Должно быть замечено, что ключ чувствителен к регистру, поэтому вам, вероятно, нужно сделать его каноническим (с помощью нижнего регистра и, возможно, URL-адреса для его декодирования)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...