1

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はこれに対してより便利なソリューションを持っていますか?アプリケーションエンジン/ djangoには他にどのようなクラスが実装されていますか?

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

を私はしばらくの間はDjangoを使用していない答えられないだろうが、あなたは[はExpando]で見たいと思うかもしれません(http://code.google.com/ appengine/docs/python/datastore/expandoclass.html)または[PolyModel](http://code.google.com/appengine/docs/python/datastore/polymodelclass.html)のクラスを参照してください。 –

答えて

2

CategoryPropertyは、意味の名前を持つだけStringProperty次のとおりです:それは別のタグ名を使用してXMLにシリアルされたとき、私は、代わりにこのように私の選択を行う必要があります。それ以外のものは本当に違いはありません。

最後のスニペットは機能するはずですが、なぜ整数インデックスに頼るのですか?ある日注文を変更すると問題になることがあります。あなたは代わりに辞書を使用することもできます。

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

moraesありがとうございます。なぜ整数インデックスに頼っているのですか?まあ、 'cg = 4'は、URLクエリがカテゴリを選択する方法です。私自身の整数インデックスを持つデータモデルを持つことは間違っているように見えました。そして今、私はi18nでそれをやり遂げることができ、独自の整数セットを作ることに依存するデータモデルを避けています。 –