0

車のモデルが 1 つあるとします。各車には、色、サイズ、重量などの属性があります。車のオブジェクトごとに新しい属性を作成できるようにする必要があります。ただし、「属性」を共有して、属性「サイズ」がデータベースに一度だけ存在し、ユーザーが追加したオブジェクトごとに値が存在するようにします。

私の古いアプローチは 2 つのモデルでした。Car、KeyValue(key: String、value:String) で、Car は KeyValue と 1:m の関係にありました。

さて、上記の制約を確実にするために、次のことを考えました。

  • 3 つのオブジェクト: Car、Key、Value
  • 値(キー: キー)
  • 車 (値に対して 1:m の関係)

ただし、この逆のアプローチは非常にうまく機能しますが、私には「きれい」に見えません。したがって、よりクリーンなアプローチが可能かどうかを尋ねたいと思います。

4

3 に答える 3

1

私はこれを読んだ http://www.craigkerstiens.com/2012/06/11/schemaless-django/

私はこれを使用していませんが、大丈夫だと思います。

それほど複雑ではないアプローチは

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

これがあなたに役立つことを願っています

于 2012-07-06T14:04:21.730 に答える
0

あなたの「選択肢」が順応性がある場合、つまり、追加、編集、または削除できる場合、選択肢はそれ自身のモデルでなければなりません。例えば:

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

class Car(models.Model):
    color = models.ForeignKey(Color, related_name='cars')
于 2012-07-05T19:34:40.083 に答える
-2

Cars と CarModels が必要です

CarModel には 2 つのプロパティ リストがあります。そのモデルのすべての車の「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
}
于 2012-07-05T19:38:44.200 に答える