コンピューターのハードウェアをまとめたアプリを作っています。djangoを使うのはこれが初めてです。次のモデルがあるとします。
class Memory(models.Model):
partNum = models.CharField()
capacity = models.CharField()
class Computer(models.Model):
name = models.CharField()
memory = models.ManyToManyField(Memory)
# also has cpus, hard drives, and motherboard, but focus on memory for now
1つのメモリオブジェクトは多くのコンピュータオブジェクトに属することができ、1つのコンピュータオブジェクトは多くのメモリオブジェクトを持つことができます-多対多。ただし、複数のメモリースティックを使用する場合は、コンピューターにまったく同じメモリースティックを取り付ける必要があります。
それでも、djangoのmanytomanyフィールド(デフォルトでは?)は、メモリとコンピュータの関係の1つのインスタンスのみを許可します。これは、私が一意である必要があります。これを回避する方法はありますか?
管理ページで、同じメモリオブジェクトの多くをコンピュータに追加しようとすると、「このコンピュータとメモリとのコンピュータとメモリの関係はすでに存在します」と表示されます。manage.pyシェルのサーバーオブジェクトに同じメモリオブジェクトを複数回追加しようとすると、追加されたメモリオブジェクトは1つだけであるように見えます。重複するエントリを持つようにデータベースを手動で編集しようとすると、エントリがすでに存在するというエラーが表示されます。データベース構造では、ある種の「一緒にユニークな」インデックスが強制されていることがわかります。その句を削除するようにテーブルを変更した場合、それで問題は解決しますか?おそらく、djangoマネージャーが予想よりも愚かでない限り、そうではありません。
私のオプションは何ですか?私自身の中間モデルを書いて、through
構成を使用しますか?しかし、それでは、クールなfilter_horizontalウィジェットを使用できなくなります。コンピューターモデルを書き直して、外部キーフィールドとメモリオブジェクトの数のフィールドを追加しますか?しかし、その後、ManyToManyAPI機能を取得できません。ヘルプ!