Google app engine 从表单GAE python添加或更新对象

Google app engine 从表单GAE python添加或更新对象,google-app-engine,google-cloud-datastore,Google App Engine,Google Cloud Datastore,我尝试创建一个类,将表单中的数据添加到db.model中,但我的问题是,当我尝试添加现有书籍时,我希望更新副本,而不是添加新对象。我真的很想找到答案,我读过GAE的编程书籍,但我没有找到解决问题的方法。 提前感谢您,如果有人用示例代码而不是仅仅用命令来回答,我将非常感激(例如,尝试使用get_by_id()) 这是我的一部分资料 class Book(db.Model): book_id = db.IntegerProperty() title = db.StringProper

我尝试创建一个类,将表单中的数据添加到db.model中,但我的问题是,当我尝试添加现有书籍时,我希望更新副本,而不是添加新对象。我真的很想找到答案,我读过GAE的编程书籍,但我没有找到解决问题的方法。 提前感谢您,如果有人用示例代码而不是仅仅用命令来回答,我将非常感激(例如,尝试使用get_by_id())

这是我的一部分资料

class Book(db.Model):
    book_id = db.IntegerProperty()
    title = db.StringProperty()
    author = db.StringProperty()
    copies = db.IntegerProperty()
    isbn = db.IntegerProperty()
    copyright_date = db.StringProperty()
    category = db.StringProperty()
    comments = db.StringProperty()



class Add(webapp.RequestHandler):        #Form to input data
    def get(self):
            self.response.out.write("""            
          <html>
            <body>
              <form action="/sign" method="post">
        <table border="0">
        <tr>
            <td>ISBN:</td> <td><input type="text" name="isbn"</td>
        </tr>
                <tr>
            <td>Title:</td> <td><input type="text" name="title"</td>
        </tr>
        <tr>
            <td>Author:</td> <td><input type="text" name="author"</td>
        </tr>
        <tr>
            <td>Copies:</td> <td><input type="text" name="copies"</td>
        </tr>
        <tr>
            <td>Copyright Date:</td> <td><input type="text" name="copyright_date"</td>
        </tr>
        <tr>
            <td><div>Category:</td> <td><select>
            <option name="category" value="adventure">Adventure</option>
            <option name="category" value="comedy">Comedy</option>
            <option name="category" value="dramatic">Dramatic</option>
            <option name="category" value="mystery">Mystery</option>
            <option name="category" value="science_fiction">Science Fiction</option></select></td>
        </tr>        
            <tr><td>Comments:</td></tr></table>
            <div><textarea name="comments" rows="5" cols="40" value="Add your comments here"></textarea></div>
            <div><input type="submit" value="Add Book">
            <input type="reset" value="Reset"></div>

              </form>
            </body>
          </html>""")




class Guestbook(webapp.RequestHandler):
  def post(self):
    book = Book()
    book.isbn = int(self.request.get('isbn')) 
    book.title = self.request.get('title')
    book.author = self.request.get('author')
    book.category = self.request.get('category')
    book.copies = int(self.request.get('copies'))
    book.copyright_date = self.request.get('copyright_date') 
    book.put()      



class Stock(webapp.RequestHandler):
    def get(self):                    #Retrieve all data from DataBase (Here is the StockHouse)
        Book = db.GqlQuery("SELECT * FROM Book ")
        for book in Book:
            print book.book_id, book.isbn, book.title, book.author, book.category, book.copyright_date, book.copies, book.comments
教材(db.Model):
book_id=db.IntegerProperty()
title=db.StringProperty()
author=db.StringProperty()
copies=db.IntegerProperty()
isbn=db.IntegerProperty()
版权所有\u date=db.StringProperty()
category=db.StringProperty()
comments=db.StringProperty()
类添加(webapp.RequestHandler):#输入数据的表单
def get(自我):
self.response.out.write(“”)

ISBN:为了更新现有条目,您需要一个不同的处理程序,该处理程序将接受post参数以及要更新的实体的id或密钥。通常这在url中,例如:

POST/updateentity/id

然后在处理程序中:

def get(self, id):
  existing = Model.get_by_id(long(id))
  model.field = self.request.get("field")
  model.put()

你可以使用
Model
方法。另请参阅。

所有介绍性书籍都应该有大量关于这方面的资源,包括其他建议,例如使用模板引擎和表单库。你确定你读过它们吗?我在这里的项目是只使用webapp和一些自定义模板,而不使用eg django表单。我知道这听起来很有趣trange,但我不是老师..在这个问题上,他使用带有值的get_或_insert,但我想使用一个变量,而且,当我第二次使用isbn代码输入带有5个副本的书籍LOTR时,我想将其更新为副本+5,而不是将副本更改为5。