在数据存储中插入数据 - App Engine - 一对多

时间:2013-06-28 03:35:00

标签: python google-app-engine datastore

我是GAE和python的初学者。我无法理解如何使用一对多关系插入数据,而且我对我正在做的事情知之甚少。

我正在尝试创建一个库存应用。基本上,我想在每个类别下插入产品。

我的db模型如下。

class Category(db.Model):
    category = db.StringProperty()
    date = db.DateTimeProperty(auto_now_add=True)

class Product(db.Model):
    ref_category = db.ReferenceProperty(Category)
    name = db.StringProperty()

我能够在数据存储区中插入类别,但每个类别的产品是我遇到问题的地方。

我有一个类似下面的表格,我不确定这是否也是正确的方法。是否也使用隐藏输入中的密钥插入?

<form action="/addproduct" method="post">
        <div><label>Product Name:</label><br /><input type="name" name="name" /></div>
        <div><input type="hidden" name="ref_category" value="{{selected_category.key()}}" /></div>
        <input type="submit" value="Add Candidate">
        </form>

然后,我的插入代码在下面,我遇到了麻烦。我试图了解在线提供的资源,但我的脑细胞不能再处理它了。

def post(self):
        product = Product()
        product.name = self.request.get('name')
        product.ref_category = self.request.get('ref_category') 
        product.put()

我希望有人帮助我了解提供解决方案的时间。

1 个答案:

答案 0 :(得分:1)

您正在尝试将字符串设置为ReferenceProperty,因为self.request.get返回字符串类型。 ref_category的“Product”字段为db.ReferenceProperty,其中包含db.KeyCategory个对象,但您尝试将其设置为字符串。

你可以这样做:

def post(self):
    product = Product()
    product.ref_category = db.get(self.request.get('ref_category'))
    product.put()