Python 在谷歌应用程序引擎中输入类别的不同方式
我正在寻找应用程序引擎中处理类别的最智能/各种方式。我认为有两种方法: 使用方式A:Python 在谷歌应用程序引擎中输入类别的不同方式,python,google-app-engine,gql,Python,Google App Engine,Gql,我正在寻找应用程序引擎中处理类别的最智能/各种方式。我认为有两种方法: 使用方式A: companycategory = db.ReferenceProperty(mycategories, collection_name = 'categories') 根据url中的示例: class Category(db.Model) name = db.StringProperty(required=True) city = db.ReferenceProperty(City, c
companycategory = db.ReferenceProperty(mycategories, collection_name = 'categories')
根据url中的示例:
class Category(db.Model)
name = db.StringProperty(required=True)
city = db.ReferenceProperty(City, collection_name = 'categories')
方法B:
companycategory = db.CategoryProperty(default="A", choices=["A", "AA", "B", "C"], required=True)
还有什么要考虑的吗?A使用了一个表和另一个对象模型,这似乎有些过分,但B将文本放入字段的方式意味着打字错误很可能会慢慢出现。除了将整数放入类别字段并手动引用之外,还有其他聪明的方法吗?还是我要用另一个模型/桌子来咬紧牙关
提前感谢您可以查看其他选项
在AppEngine中处理类别的“最智能”方式因您的用例而异
您是否有预定义的类别列表,或者您是否允许用户动态添加自己的类别?根据您的具体情况,最佳答案可能会有所不同
在大多数使用AppEngine的情况下,您通常希望使用“非规范化”选项。它在数据存储写入和读取方面为您节省了资金。因为它写和读的更少,所以速度也更快
您也可以使用db.StringListProperty()
而不是db.CategoryProperty()
来允许公司在多个类别下归档
如果您提前知道可能的类别,我会做类似的事情:
class Company(db.Model):
name = db.StringProperty()
category = db.StringListProperty() #to allow multiple categories
#Creating a company
company = Company()
company.name = "XYZ Car Rental Corporation"
company.category = ["NEW YORK","CAR RENTAL", "CORPORATION"] #City and Company Category. I would make them all uppercase to prevent case-sensitive/typo issues.
company.put()
#querying
query = Company.all()
query.filter('category',"NEW YORK")
results = query.fetch(10) #this returns Company entities with "NEW YORK" in their category list
#You can also do multiple categories (AND)
query = Company.all()
query.filter('category',"NEW YORK")
query.filter('category',"CORPORATION")
results = query.fetch(10) #this returns Company entities with "NEW YORK" and "CORPORATION" in their category list
<>如果您的用户动态地创建类别,并且有相对较少(少于1000个)实体在某个类别之下,我建议。 @戴夫:如果您开始更新,您可能需要考虑使用新的NDB模块代替DB:。另外,由于您担心拼写错误等问题,您可以为所有有效类别创建一个单独的存储,并检查输入,以确保存储的内容是适当的。谢谢。我想我的一个复杂问题是Django框架。字符串方式虽然不如键那么优雅,但在这个用例中效果很好。然而,我在使用Django模板时遇到了问题,我得到了以下错误:
code
BadValueError:Property companycategory是['B','I','o'];当我使用以下code
companycategory=db.StringListProperty时,必须是['Bio'、'Pharm'、'I'、'']code
中的一个(default=“Bio”、choices=[“Bio”、“Pharm”、“I”、“S”],required=True)code
@Dave:将default=“Bio”更改为default=[“Bio”]。StringListProperty需要一个字符串列表(即使是一个字符串列表也可以),但不是字符串。