使用db.ReferenceProperty在Google App Engine中引用其他表

时间:2012-05-08 13:38:35

标签: python django google-app-engine

我有一个由表格填充的模型(公司类别) - 简单的名称等。然后我有一个公司模型,我想将这两个链接在一起,这样我在填充的下拉框中有类别。< / p>

class CompanyCategory(db.Model):
    categoryname = db.StringProperty(required=True) 

class Company(db.Model):
    companyurl = db.StringProperty(required=False)
    companycategory = db.ReferenceProperty(CompanyCategory, collection_name='category')

然而,当我这样做时,我收到以下错误:

<class 'google.appengine.ext.db.DuplicatePropertyError'>: Class CompanyCategory already has property categoryname 
Traceback (most recent call last):
  File "/base/data/home/apps/XXX/1.358759458095086806/showcompanies.py", line 52, in <module>
    class Company(db.Model):
  File "/base/python_runtime/python_lib/versions/1/google/appengine/ext/db/__init__.py", line 514, in __init__
    _initialize_properties(cls, name, bases, dct)
  File "/base/python_runtime/python_lib/versions/1/google/appengine/ext/db/__init__.py", line 429, in _initialize_properties
    attr.__property_config__(model_class, attr_name)
  File "/base/python_runtime/python_lib/versions/1/google/appengine/ext/db/__init__.py", line 3656, in __property_config__
    self.collection_name))

如何使这项工作?我已经看了一些例子,但在这种情况下我无法完成工作。如何将公司类别列入清单。

以下是表格中的内容:

CompanyCategory实体

‹ Prev 20 1-1 Next 20 ›
    ID/Name     categoryname
    id=96001    ss 

这是模型定义的另一种方式。我希望每家公司都有一个从表中填充的类别。通过以下定义,我可以获得类似于我正在寻找的东西:

class CompanyCategory(db.Model):
    categoryname = db.StringProperty(required=False)
    def __unicode__(self):
            return u'%s' % (self.categoryname)

class Company(db.Model):
    companyurl = db.StringProperty(required=False)
    companyname = db.StringProperty(required=False)
    companydesc = db.TextProperty(required=False)
    companyaddress = db.PostalAddressProperty(required=False)
    companypostcode = db.StringProperty(required=False)
    companyemail = db.EmailProperty(required=False)
    companycountry = db.StringProperty(required=False)



    companyvalid = db.BooleanProperty()
    companyentrytime = db.DateTimeProperty(auto_now_add=True)
    companylatlong = db.GeoPtProperty()
    companycategory = db.ReferenceProperty(CompanyCategory)

当我去添加公司时,我现在得到一个下拉框 - 从表中的值填充。但是,我没有在提交时填充数据存储区中文本值的下拉列表中的值。该怎么做?

1 个答案:

答案 0 :(得分:1)

将代码粘贴到shell.appspot.com中工作正常 - 所以无论问题的原因是什么,您的示例代码都不能代表它。正如克里斯托弗·拉米雷斯所暗示的那样,你可能在同一模型或模型的父类中声明companycategory两次。