Django “存储关键值的干净方法”;物业;?

Django “存储关键值的干净方法”;物业;?,django,django-models,Django,Django Models,假设我有一个汽车模型。每辆车都有属性:颜色、大小、重量等。。。我希望用户允许为每个汽车对象创建新属性。但是,我希望共享“属性”,以便属性“大小”在数据库中只存在一次,但用户添加它们的每个对象都存在值 我以前的方法是两个模型:Car,KeyValue(key:String,value:String),Car与KeyValue有1:m的关系 现在,为了确保我的上述限制,我想到了以下几点: 三个对象:汽车、钥匙、价值 值(键:键) 汽车(1:m与价值的关系) 然而,这种反向方法非常有效,但在我看来

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

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

现在,为了确保我的上述限制,我想到了以下几点:

  • 三个对象:汽车、钥匙、价值
  • 值(键:键)
  • 汽车(1:m与价值的关系)
然而,这种反向方法非常有效,但在我看来并不“干净”。因此,我想问一下,是否可以采用更干净的方法。

如果您的“选择”是可延展的,即可以添加、编辑或删除,那么选择应该是它自己的模型。例如:

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

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

你应该有汽车和汽车模型

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

我读了这个

我没用过这个,但我觉得没关系

一种不太复杂的方法是

django picklefield


我希望这可以帮助您

这是一个非常清晰的标记,带有Django,这是一个Python框架。如果你要回答,至少要用正确的语言。我希望我的用户创建他们自己的属性
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
}