2

我在我的应用程序中创建了一个实体“FlipKart”,并使用了一个运行查询的处理程序,以便我可以在我的 HTML 表单中显示给定的条目。我有用于组织我的 html 文件的 Jinja2 模板。

这是实体的代码:

class FlipKart(db.Model):
    name = db.StringProperty()            
    quantity = db.IntegerProperty()
    total = db.IntegerProperty()    

这是我处理和运行查询的处理程序:

class WebeHandler(Handler):         
    def get(self):
        self.render("we.html")
    def post(self):
        b_name = self.request.get("bkname")
        b_quantity = self.request.get("qnty")
        b_total = self.request.get("tot")        

        if(b_name and b_quantity and b_total):
            a = FlipKart(BookName = b_name, Quantity = b_quantity, GrandTotal = b_total)
            a.put()
            self.final()
    def final(self):
        flips = db.GqlQuery("SELECT * FROM FlipKart")
        self.render("we.html", flips = flips)

这是我的html文件:

<html>
<head>
    <title>Web Engineering</title>
    <style type = "text/css">

    </style>
</head>

<body>
    <form method = "post">
        Book Name<input type = "text" name = "bkname">
        <br>
        Quantity<input type = "text" name = "qnty">
        <br>
        Total Prize<input type = "number" name = "tot">
        <br>
        <input type = "submit">
        <br><br><br>
        <hr>

        {%
            for flip in flips
        %}
            <div>You have ordered a {{flip.name}}</div>
        {%endfor%}
    </form>
</body>

但是,当我运行此应用程序时,我在浏览器中的表单后收到以下文本:

You have ordered a None
You have ordered a None
You have ordered a None
You have ordered a None
You have ordered a None
You have ordered a None
You have ordered a None
You have ordered a None
You have ordered a None
You have ordered a None
You have ordered a None
You have ordered a None
You have ordered a None
You have ordered a None
You have ordered a None
You have ordered a None
You have ordered a None
You have ordered a None

似乎是什么问题?

4

2 回答 2

5

您的查询没有问题,您可以看到循环重复。您的问题是您创建实体的代码

a = FlipKart(BookName = b_name, Quantity = b_quantity, GrandTotal = b_total)

您的模型定义为

class FlipKart(db.Model):
    name = db.StringProperty()            
    quantity = db.IntegerProperty()
    total = db.IntegerProperty()   

您实际上并未在实体中存储任何值。这是非常基本的python。

类构造函数调用应该是

a = FlipKart(name = b_name, quantity = b_quantity, total = b_total)

您需要按照其他答案进行 int 转换,您没有得到分配错误的唯一原因是您从未将值分配给属性。

另请注意,由于最终的一致性,您的查询可能不会显示最近添加的实体,(我会让您对此进行一些阅读)

于 2013-10-12T23:41:02.767 回答
0

我只是想指出,您可能希望重组实体以使您能够进行高度一致的查询,因为即使在进行了已经指出的更正之后,对于新添加的实体,您也将继续获得无。

这是由于最终的一致性。请查看:https ://developers.google.com/appengine/docs/python/datastore/structuring_for_strong_consistency

于 2013-10-13T04:47:26.117 回答