【发布时间】: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")
【问题讨论】:
标签: python google-app-engine django-models django-templates django-forms