【问题标题】:How to implement a category system如何实现分类系统
【发布时间】:2011-10-19 19:37:53
【问题描述】:

我想实现一个适用于 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") 

【问题讨论】:

  • 我有一段时间没有使用 Django,所以不会回答,但你可能想看看 ExpandoPolyModel 类。

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


【解决方案1】:

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

你的最后一个 sn-p 应该可以工作,但为什么要依赖整数索引呢?如果您有一天更改订单,可能会出现问题。您可以使用 dict 代替:

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

【讨论】:

  • 谢谢你。为什么要依赖整数索引? cg=4 是 URL 查询应该选择一个类别的方式。拥有一个带有我自己的整数索引的数据模型似乎是错误的,现在我明白了如何使用 i18n 来做到这一点,并避免拥有一个依赖于制作我自己的整数集的数据模型。
猜你喜欢
  • 1970-01-01
  • 2016-12-31
  • 2010-12-21
  • 2019-05-10
  • 2020-03-20
  • 2017-06-23
  • 2021-11-28
  • 2011-12-01
  • 1970-01-01
相关资源
最近更新 更多