2012-05-08 2 views
1

У меня есть одна модель (категория компании), заполненная таблицей - простые имена и т. Д. Затем у меня есть модель компании, и я бы хотел связать эти два вместе, чтобы я имеют категории в заполненном раскрывающемся списке.Ссылка на другие таблицы в Google App Engine с использованием db.ReferenceProperty

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) 

я теперь получить выпадающий, когда я иду, чтобы добавить компанию - населенное из значений в таблице. Однако я не получаю значение в раскрывающемся списке, заполненном текстовым значением в хранилище данных при его представлении. Как это сделать?

+0

Вы пытаетесь это сделать на локальном сервере приложений или prod? Используя локальный сервер приложений, я не могу воспроизвести вашу проблему. Можете ли вы также указать код, который вы используете для создания компании и CompanyCategory? –

+0

Ошибка говорит: «Класс CompanyCategory уже имеет свойство categoryname», в котором вы объявляете '' categoryname = db.StringProperty (required = True) '' более одного раза в модели '' CompanyCategory''. –

+0

@ Dan Это прямо в производстве. – Androidian

ответ

1

Вставка кода в shell.appspot.com работает очень хорошо - поэтому, независимо от причины вашей проблемы, ваш образец кода не является его представителем. Как предполагает Кристофер Рамирес, вы, вероятно, дважды объявляете companycategory, либо в той же модели, либо в родительском классе модели.

Смежные вопросы