2014-04-03 5 views
1

저는 Google App Engine with Python을 사용하여 전자 상거래 사이트에서 작업하고 있습니다. 여기 내 데이터 저장소에서 엔티티 '제품'이다 :Google App Engine : 데이터베이스 객체가 반복 가능하지 않습니다.

enter image description here

을 지금, 나는 사용자의 선호도에 따라 특정 제품을 필터링하는 것을 시도하고있다. 사용자는 드롭 다운 옵션의 도움으로 이러한 환경 설정을 선택할 수 있습니다.

<form method = "post"> 
     <p>Department: </p> 
     <select name = "branch"> 
      <option></option> 
      <option>Computers</option> 
      <option>EXTC</option> 
      <option>IT</option> 
      <option>ETRX</option> 
      <option>MECH</option> 
     </select> 
     <br> 
     <br> 
     <p>Semester: </p> 

     <select name = "semester"> 
      <option></option> 
      <option>1</option> 
      <option>2</option> 
      <option>3</option> 
      <option>4</option> 
      <option>5</option> 
      <option>6</option> 
      <option>7</option> 
      <option>8</option> 
     </select> 

     <br> 
     <br> 
     <p>Publications: </p> 
     <select name = "publications"> 
      <option></option> 
      <option>Techmax</option> 
      <option>Nandu</option> 
      <option>Pearson</option> 
      <option>Tata McGraw Hill</option> 
      <option>Technical</option> 
     </select> 
      <br> 
     <br> 
     <p>Subject: </p> 
     <select name = "subject"> 
      <option></option> 
      <option>System Programming and Compiler Construction</option> 
      <option>Advanced Microprocessors</option> 
      <option>Microprocessors and Interfacing</option> 
      <option>Computer Networks</option> 
      <option>Data Warehouse and Data Mining</option> 
     </select>  

     <br><br> 

     <input type = "submit"> 
     </form> 

가 여기 내 파이썬 코드입니다 : 여기 newbooks.html '에서 같은에 대한 코드의

class NewBooks(Handler): 
    def get(self): 
     self.render("newbooks.html") 
    def post(self): 
     branch = self.request.get("branch") 
     semester = self.request.get("semester") 
     publications = self.request.get("publications") 
     subject = self.request.get("subject") 
     if semester: 
      yo = int(semester) 
     if(branch and semester and publications and subject): 
      disp = Products.all().filter("branch =", branch).filter("publisher =", publications).filter("name =", subject).filter("semester =", yo).get() 
      self.render("newbooks.html", disp = disp) 
     elif(branch and semester and publications): 
      disp = Products.all().filter("branch =", branch).filter("publisher =", publications).filter("semester =", yo).get() 
      self.render("newbooks.html", disp = disp) 
     elif(branch and semester and subject): 
      disp = Products.all().filter("branch =", branch).filter("name =", subject).filter("semester =", yo).get() 
      self.render("newbooks.html", disp = disp) 
     elif(branch and publications and subject): 
      disp = Products.all().filter("branch =", branch).filter("publisher =", publications).filter("name =", subject).get() 
      self.render("newbooks.html", disp = disp) 
     elif(semester and publications and subject): 
      disp = Products.all().filter("publisher =", publications).filter("name =", subject).filter("semester =", yo).get() 
      self.render("newbooks.html", disp = disp) 
     elif(branch and semester): 
      disp = Products.all().filter("branch =", branch).filter("semester =", yo).get() 
      self.render("newbooks.html", disp = disp) 
     elif(semester and publications): 
      disp = Products.all().filter("publisher =", publications).filter("semester =", yo).get() 
      self.render("newbooks.html", disp = disp) 
     elif(publications and subject): 
      disp = Products.all().filter("publisher =", publications).filter("name =", subject).get() 
      self.render("newbooks.html", disp = disp) 
     elif(branch and subject): 
      disp = Products.all().filter("branch =", branch).filter("name =", subject).get() 
      self.render("newbooks.html", disp = disp) 
     elif(branch and publications): 
      disp = Products.all().filter("branch =", branch).filter("publisher =", publications).get() 
      self.render("newbooks.html", disp = disp) 
     elif(semester and subject): 
      disp = Products.all().filter("name =", subject).filter("semester =", yo).get() 
      self.render("newbooks.html", disp = disp) 
     elif(branch): 
      disp = Products.all().filter("branch =", branch).get() 
      self.render("newbooks.html", disp = disp) 
     elif(semester): 
      disp = Products.all().filter("semester =", yo).get() 
      self.render("newbooks.html", disp = disp) 
     elif(publications): 
      disp = Products.all().filter("publisher =", publications).get() 
      self.render("newbooks.html", disp = disp) 
     elif(subject): 
      disp = Products.all().filter("name =", subject).get() 
      self.render("newbooks.html", disp = disp) 

그러나이 사용자가 선택한 후, 그리고 그/그녀가 선호하는 필터링 조건을 제출, 내가 얻을 다음 오류 :

TypeError: 'Products' object is not iterable 

내 코드에 어떤 문제가있는 것 같습니까? 데이터베이스의 항목을 반복 할 수없는 이유는 무엇입니까?

+1

get()을 사용하지 마십시오. 이것은 단일 항목을 제공합니다. 그것을 건너 뛰거나 fetch()를 사용하십시오 – voscausa

답변

3

fetch()를 사용하여 엔티티 목록을 반환하십시오. get()은 쿼리와 일치하는 첫 번째 엔티티를 반환하기 때문에 iterable이 아닙니다.

+0

다음은 fetch()로 코드에서 get()을 대체 할 때 발생하는 오류입니다 : "TypeError : fetch()가 적어도 두 개의 인수를가집니다 (주어진 1 개)" –

+2

한계 매개 변수. 예를 들어 fetch (100)는 처음 100 개의 엔티티를 반환합니다. –

2

"첫 번째 결과 만 반환하는"get()을 호출하고 있습니다. 대신 fetch()을 호출해야 결과 목록이 반환됩니다.

관련 문제