2013-06-28 73 views
0

我是GAE和python的初学者。我无法理解如何使用一对多关系插入数据,而且我对自己的工作知之甚少。在数据存储中插入数据 - App Engine - 一对多

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

我的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() 

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

+0

如果你开始一个新项目或学习应用引擎,那么我建议你开始使用NDB。 – Sandeep

回答

1

您试图将字符串设置为ReferenceProperty,因为self.request.get返回字符串类型。 Product的'ref_category'字段是db.ReferenceProperty,它需要db.KeyCategory对象,但您试图将其设置为字符串。

你可以这样做:

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

不需要点击数据存储区以获取实际对象:'db.Key(...)'可以正常工作。 –

+0

哇,真甜!非常感谢Nijin和丹尼尔! – goryo