2011-01-12 9 views
0

私はGran Turismo 5 Djangoアプリケーションを開発中です。ここでは非常に単純化されたデータモデルです:Django - 論理テストをレコードとして保存する

class Event(models.Model): 
    name = models.CharField(max_length=256, unique=True) 

class EventCriteria(models.Model): 
    name = models.CharField(max_length=256, unique=True) 
    events = models.ManyToManyField(Event) 
    test = ??? 

class Country(models.Model): 
    name = models.CharField(max_length=256, unique=True) 

class Make(models.Model): 
    name = models.CharField(max_length=256, unique=True) 
    country = models.ForeignKey(Country) 

class Car(models.Model): 
    name = models.CharField(max_length=256, unique=True) 
    make = models.ForeignKey(Make) 

class Setup(models.Model): 
    name = models.CharField(max_length=256, unique=True) 
    car = models.ForeignKey(Car) 
    horsepower = models.IntegerField() 

例えば、特定のイベントが基準「国=イタリア」を持っているかもしれません。次のようなテストを必要とする上記のモデル、に対して適用する場合:

setup.car.make.country.name == u'Italy' 

誰も私が作るためにEventCriteriaモデル(特に「試験」フィールドまたはフィールド)を構築する方法について、優れたフレームワークを持っていますa)これらのテストを保存し、b)可能な将来のビューでそれらをフィルタとして適用するか?

おかげで、

マイク

答えて

2

は、それはあなたの「テスト」は、単純なブールフィールドではありません理由については明らかではありません。問題は混乱しています。 これはしばしば要求されているので、永続フィルタが本当に必要であると仮定しています。

Djangoフィルタは辞書です。

SomeModel.objects.filter(column=value, column__contains=value) 

SomeModel.objects.filter(**{'column':value, 'column__contains':value}) 

「テスト」を継続するためにこれを行うことができます。

  1. "フィルタ"式を辞書に変換します。

  2. JSONエンコードBLOBそれ保存

  3. として辞書。

次のようにテストを適用できます。

  1. フィルタBLOB

  2. 辞書をJSON-デコード

  3. は、適切なクラスのフィルタで辞書を使用して取得します。

+0

私はそうだと思います。ありがとう。 – MikeRand

関連する問題