Django - 将逻辑测试存储为记录

时间:2011-01-12 18:33:29

标签: python django django-models

我正在研究Gran Turismo 5 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()

例如,给定事件可能具有“Country = Italy”标准。当应用于上述模型时,需要进行如下测试:

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

有没有人有一个很好的框架,我可以如何构建EventCriteria模型(尤其是'test'字段或字段')来a)存储这些测试,以及b)在未来的视图中将它们作为过滤器应用?

谢谢,

麦克

1 个答案:

答案 0 :(得分:2)

目前尚不清楚为什么你的“测试”不是一个简单的布尔字段。问题很混乱。 我假设确实需要一个持久性过滤器,因为这经常被请求。

Django过滤器是一个字典。

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

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

你可以这样做来坚持你的“测试”。

  1. 将“过滤器”表达式转换为字典。

  2. JSON将字典编码为BLOB

  3. 保存。

  4. 您可以按如下方式应用测试。

    1. 获取过滤器BLOB

    2. JSON解码字典

    3. 在过滤器中使用适当类的字典。