我有一種情況,我試圖創建一個快速簡單的管理界面,供作曲家在樂曲中列出樂器。我正在尋找的是一個單一的實體,一個儀器,它定義了一個特定的工具組合。例如,薩克斯管四重奏可能包括:Django管理員,多對多字段,多個重複條目
- 高音薩克斯
- 中音薩克斯
- 高音薩克斯
- 低音薩克斯
,但它也可以由兩個女低音,男高音和巴里不讀。當您嘗試添加整個部分時(如第1把小提琴 - 多達18位成員),問題會變得更加嚴重。
我想出了這個樣子的初始模型:
class Work(Post):
authors = models.ManyToManyField(Individual)
title = models.CharField(max_length=255)
subtitle = models.CharField(max_length=255, blank=True)
program_notes = models.TextField(blank=True)
notes = models.TextField(blank=True)
media = models.ManyToManyField('Upload')
class Composition(Work):
instrumentation = models.ForeignKey('Instrumentation')
class Instrumentation(models.Model):
forces = models.ManyToManyField(Instrument)
types = models.ManyToManyField('InstrumentationType')
class InstrumentationType(models.Model):
type = models.CharField(max_length=255)
variation = models.SmallIntegerField(default=0)
created = models.DateTimeField(auto_now_add=True)
modified = models.DateTimeField(auto_now=True)
我打算以後在一塊,演員在排練,演唱會等各種樂器映射,所以它不是一個簡單的多算我需要的。如果我這樣做,沒有Django的(即只是SQL和數據庫設計),我想有一個映射表
儀表:
- ID(INT串行PK),
- 型(FK)
- composition_id(FK),
- INSTRUMENT_ID(FK)
它看起來像Django是在d創造這個確切的情況,我atabase,但由於某種原因,框架需要type
,composition_id
和instrument_id
是唯一在一起。管理界面(多選框)也清楚地表明,具有多個類似的條目並不是多方面的設計工作的方式。那麼我如何實現這一目標呢?有沒有一個既定的解決方法呢?