0

曲線が関連付けられている製品(たとえば、ディオド)のリストがあります。例えば、

  • ダイオード1:曲線1:[(0,1)、(1,3)、(2,10)、....、(100,0.5)]
  • ダイオード2:曲線2:[(0,2)、(1,4)、(2.1,19)、...、(100,0)]

したがって、製品ごとに曲線(x軸の値は同じrange(1,100))がありますが、y軸の値は異なります。

私の質問は、後でビューでデータを計算したい場合(たとえば、曲線の下の領域、またはその曲線に別の曲線を掛けたものなど)、そのようなデータを(Django + PostgreSqlを使用して)保存するためのベストプラクティスは何ですか?チャートも作成するので、ビューは値をプルする必要があります。

私の最初の試みにはさまざまな制限がありました。

  • ナイーブな試み1

     # model.py
     for i in range(101):
         name_sects = ["x", str(i+1)]
         attrs["".join(name_sects)] = models.DecimalField(_("".join([str(i+1),' A'])), max_digits=6)
    
    
     attrs['intensity'] = model.DecimalField(_('Diode Intensity'))
    
    
     Diode = type('Diode', (models.Model,), attrs)
    

わかりました。これにより、「x」、x1、x2などごとにフィールドが作成され、管理者で各「y」に入力できます...しかし、ビューまたはテンプレートでどのように操作するかは明らかではありません。(そして明らかに、記入するのが苦痛です)

  • ナイーブな試み2

    #model.py
    class Curve(models.Model)
        x_axis = models.PositiveIntegerField( ...)
        y_axis = models.DecimalField( ...)
    
    class Diode(models.Model)
        name = blah, blah
        intensity = model.DecimalField(_('Diode Intensity'), blah, blah)
        characteristic_curve = model.ManyToManyField(Curve)
    

多対多は前進する道ですか?各ダイオードに対応する単一の曲線であっても?(ただし、多くのポイント、おそらく2つのダイオードが同じポイントを共有します)。

そのためのアドバイス、ヒント、またはツールへのリンクは非常にありがたいです。

4

2 に答える 2

1

速度を向上させたい場合(各製品に100のエントリがあるため、非常に大きく、100の製品とそのポイントをフェッチする必要がある場合は遅くなります)、pickleモジュールを使用して、タプルのリストをTextFieldに格納します(または、文字列の長さが変わらない場合はCharField)。

>>> a = [(1,2),(3,4),(5,6),(7,8)]
>>> pickle.dumps(a)
'(lp0\n(I1\nI2\ntp1\na(I3\nI4\ntp2\na(I5\nI6\ntp3\na(I7\nI8\ntp4\na.'
>>> b = pickle.dumps(a)
>>> pickle.loads(b)
[(1, 2), (3, 4), (5, 6), (7, 8)]

bをTextFieldに保存するだけで、リストを簡単に取り戻すことができます。

さらに良いことに、Robert Smithが言うように、http://pypi.python.org/pypi/django-picklefieldを使用します

于 2012-10-23T16:23:50.110 に答える
0

私はあなたの2番目のアプローチが好きですが、ちょっとした提案です。

class Plot(models.Model):
    x_axis = models.PositiveIntegerField( ...)
    y_axis = models.DecimalField( ...)

class Curve(models.Model)
   plots = models.ManyToManyField(Plot)

class Diode(models.Model)
    name = blah, blah
    intensity = model.DecimalField(_('Diode Intensity'), blah, blah)
    curve = models.ForeignKey(Curve)

柔軟性に関するちょっとした提案

于 2012-10-23T16:24:26.433 に答える