2011-10-04 1 views
0

사용자가 Google 계정으로 로그인 한 다음 Google 앱 엔진에서 해당 사용자의 프로필을 만들거나 업데이트하는 양식이 있습니다. 나는 새로운 항목의 키로 이메일 주소 (Google의 사용자 정보로 자동으로 채워짐)가 들어있는 양식 필드를 사용하고 싶습니다. 이렇게하면 같은 이메일을 가지고있는 한 동일한 항목이되므로 항목을 쉽게 업데이트 할 수 있습니다. 다음은 내 양식 모델과 내 페이지 게시물이며 방법은 무엇입니까? 어떻게 키를 설정하도록 수정할 수 있습니까?양식 필드를 엔티티 키 Google Apps Engine Python으로 사용합니다.

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

과 같이 정식으로 만들 필요가 있습니다. "그것은 BooleanProperty 여야하며 StringProperty가 아니어야합니다. –

+0

질문이 명확하지 않습니다. db.UserProperty()로 이미이 작업을 수행하고 있지 않습니까? 'db.UserProperty (auto_current_user = True)'로 의도했던 것처럼 작동합니까? 또는'user = users.get_current_user(); user_email = user.email()'? 이치에 맞지 않는 질문에는 대답하기가 어렵습니다. 그 외에도 [사용자는 Google 계정의 이메일 주소를 변경할 수 있습니다.] (http://code.google.com/appengine/docs/python/users/userclass.html#Introduction) 결함있는 전제입니다. –

+0

필드에서 전화를 걸면 드롭 다운 메뉴가 표시됩니다.이 프로젝트는 아직 개발 초기 단계입니다. 그리고이 응용 프로그램은 Google 도메인을 사용하는 대학에서 사용하게 될 것이며, 대학 이메일을 변경하지 않아도 문제가 적용되지 않을 것이지만 나중에 참조 할 수 있도록 알려 주셔서 감사합니다. – marblecatdog

답변

2

GAE 데이터 스토어의 모든 엔티티에는 키가 있으며, 키는 ID 또는 문자열 일 수 있습니다.
엔티티를 생성 할 때 key_name 속성을 사용하여 키가 가질 값을 지정할 수 있습니다. 예를 들어 :

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

당신은 당신이 당신의 모델에 넣고 KEY_NAME 사용 Athlete.get_by_key_name(name)를 사용하여 개체를 쿼리

"상자 밖으로"오는 하나를 사용 KEY_NAME을 제거 할 수 있습니다.
키가 대소 문자를 구분하므로 성 필드에 "예"또는 "3 회"와 같은 값을 지정할 수있는 경우가 아니면

+0

네, key_name을 추가하는 데 효과적입니다. – marblecatdog

+0

이 대답에서 분명하지 않음 : 키 이름은 문자열 값에만 적용됩니다. Int 값은 ID이며 두 값은 상호 배타적입니다. –

관련 문제