python - 如何实现分类系统

标签 python google-app-engine django-models django-templates django-forms

我想实现一个适用于 i18n 的类别结构。由于 GAE 内置了 db.CategoryProperty,但它没有实现子类别,而且我似乎正在使用类别属性,因为它是我的模型的列表对象。

class Vehicles(GeoModel,search.SearchableModel): 
  title=db.StringProperty(verbose_name="title")#required
  category=db.CategoryProperty(choices('0','1','2','3','4',default='1',verbose_name="Category") 
...

并非所有车辆都有手动或自动变速箱,但汽车肯定有。因此,我可以添加另一个实例变量,gearbox = ...,但由于这对于大多数实例来说没有任何意义,我应该避免该实现并通过继承来实现:

class Cars(Vehicles): 
  gearbox=db.CategoryProperty(choices('0','1','2','3','4',default='1',verbose_name="Gearbox"
  mileage=db.CategoryProperty(choices('0','1','2','3','4','5',default='1',verbose_name="Mileage"
  fuel=db.CategoryProperty(choices('0','1','2','3','4',default='1',verbose_name="Fuel"

使用继承的解决方案是否比仅将子类别的实例变量添加为基类中的实例变量更好?如果我使用继承,重新分类对象仍然有效吗?我如何实现这些选择,以便它使用 i18n 迭代类别?我的模板当前如下所示:

{% load i18n %}
<select name="cg" id="cat" class="category"> 
<option value='' style='background-color:#dcdcc3' id='cat1' >-- {% trans "VEHICLES" %} --</option>
<option value='2'  {% ifequal "2" cg %} selected="selected" {% endifequal %} id='cat2' >{% trans "Cars" %}</option>
...

django对此有更方便的解决方案吗? app engine/django 还有哪些其他类可以实现有效的实现?我应该像这样做我的选择吗:

 choices = [ (1, _('Vehicles')), (2, _('Cars')), (3, _('Bicycles')), (4, _('Motorcycles')) ]
 category=db.CategoryProperty(choices('0','1','2','3','4',default='1',verbose_name="Category") 

最佳答案

CategoryProperty 只是一个具有语义名称的 StringProperty:当它序列化为 XML 时,它使用不同的标记名称。真的,没有什么不同。

你的最后一个片段应该可以工作,但为什么要依赖整数索引呢?如果有一天你改变顺序,可能会出现问题。您可以使用字典代替:

choices = {
    'vehicles': _('Vehicles'),
    'cars': _('Cars'),
    'bicycles': _('Bicycles'),
    'motorcycles': _('Motorcycles')
}
category = db.CategoryProperty(choices=choices.keys(), default='cars',
                               verbose_name="Category")

关于python - 如何实现分类系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6938954/

相关文章:

python - 如何在 Pandas 中将byby()。transform()转换为value_counts()?

php - 部署到灵活的 PHP App Engine 时访问 Cloud SQL

google-app-engine - 我应该如何编写我的 Google App Engine app.yaml 文件?

python - 如何在 Django 中存储同一字段的多个副本?

django - e.message_dict 在访问测试文件时不断抛出异常

Django - 如何为模型指定数据库?

python - 如何打印这些字符?

python - 建立一个TCP聊天室并在线程处理中出错

python - 对于多平台 GPGPU 计算,是否有 OpenCL+PyOpenCL 的替代方案?

python - 您可以在 Google App 引擎 - Python 上解压缩和查看内容吗?