存储键值“属性”的干净方法?

时间:2012-07-05 19:15:26

标签: django django-models

假设我有一款车型。每辆车都有属性:颜色,尺寸,重量等......我希望用户允许为每个汽车对象创建新属性。但是,我希望共享“属性”,以便属性“大小”仅在数据库中存在一次,但是对于用户添加它们的每个对象都存在值。

我的旧方法有两个模型:Car,KeyValue(key:String,value:String),Car与KeyValue有1:m的关系。

现在,为了确保我的上述约束,我想到了以下内容:

  • 三个对象:汽车,钥匙,价值
  • 价值(钥匙:钥匙)
  • Car(1:m与价值的关系)

然而,这种反向方法效果很好但对我来说看起来并不“干净”。因此,我想问一下是否有可能采用更清洁的方法。

3 个答案:

答案 0 :(得分:1)

我读过这篇文章 http://www.craigkerstiens.com/2012/06/11/schemaless-django/

我没有用过这个,但我认为没关系。

一种不太复杂的方法是

的django-picklefield http://pypi.python.org/pypi/django-picklefield/

我希望这可以帮到你

答案 1 :(得分:0)

如果你的选择"具有可塑性,即可以添加,编辑或删除,然后选择应该是它自己的模型。例如:

class Color(models.Model):
    name = models.CharField(max_length=50)

class Car(models.Model):
    color = models.ForeignKey(Color, related_name='cars')

答案 2 :(得分:-2)

你应该有汽车和汽车模型

CarModel有两个属性列表。一个拥有" PerModel"该模型的所有汽车的属性(这意味着该模型的所有汽车具有相同的值),以及每辆汽车可以具有不同值的属性的另一个(仅名称)" PerCar"。

CarModel
{
    KeyValue(key: String, value:String) propertyValuesPerModel;
    List(String) propertyNamesPerCar;
}

Car
{
CarModel model;
KeyValue(key: String, value:String) propertiesPerCar; //Keys can only be those that appear on model.propertyNamesPerCar
}