Я ищу самый умный/способ управления категориями в App Engine. Я вижу два подхода:Различные способы ввода категорий в Google App Engine
Google App Engine Data Store Model Reference Another Class
используя способ A:
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 помещает текст в поля, что означает, что опечатка вполне может закрадываться. Короче говоря, целые числа в поле категории и ручная привязка - это разумный способ сделать что-нибудь еще? Или я кусаю пулю с другой моделью/таблицей?
Заранее спасибо
@Dave: Если вы начинаете новый, вы можете рассмотреть возможность использования более нового модуля NDB вместо базы данных: https://developers.google.com/appengine/docs/python/ndb/. Кроме того, поскольку вас беспокоили опечатки и т. Д., Вы можете создать отдельное хранилище для всех допустимых категорий и проверить ввод данных, чтобы гарантировать, что то, что хранится, является подходящим. – Sologoub
Спасибо. Я думаю, что одним из моих осложнений является инфраструктура Django. Строковый путь, хотя и не такой элегантный, как клавиши, будет хорошо работать для этой утилиты. Однако у меня возникают проблемы с шаблоном Django, я получаю следующую ошибку: 'code'BadValueError: Property companycategory - ['B', 'i', 'o']; должен быть одним из ['Bio', 'Pharm', 'I', ''] 'code', когда я использовал следующий« code' companycategory = db.StringListProperty (default = «Bio», choice = [«Bio», «Фарм», «I», «S»], обязательно = True) 'code' – Androidian
@Dave: изменить значение по умолчанию =« Bio »на значение по умолчанию = [« Bio »]. StringListProperty ожидает список строк (даже список одной строки будет делать), но не строку. – Albert