【发布时间】:2012-05-15 12:58:19
【问题描述】:
我有一种情况,我正在尝试为作曲家创建一个快速简便的管理界面,以便在一段音乐中列出乐器。我正在寻找的是一个单一的实体,一个仪器,它定义了仪器的特定组合。例如,萨克斯四重奏可能包括:
- 高音萨克斯
- 中音萨克斯
- 中音萨克斯
- 男中音萨克斯
但它也可能包含两个中音,男高音和巴里 instread。当您尝试添加整个部分(例如 1st violins -- 多达 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 serial PK),
- 类型(FK),
- composition_id (FK),
- instrument_id (FK)
看起来 Django 正在数据库中为我创建这种确切的情况,但由于某种原因,框架需要 type、composition_id 和 instrument_id 一起是唯一的。管理界面(多选框)也清楚地表明,拥有多个相似条目并不是多对多字段的设计目的。那么我该如何实现呢?是否有既定的解决方法?
【问题讨论】:
标签: django django-models django-admin many-to-many