首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django管理员,多到多个字段,几个重复条目

Django管理员,多到多个字段,几个重复条目
EN

Stack Overflow用户
提问于 2012-05-06 22:53:24
回答 1查看 2.1K关注 0票数 0

我有一个情况,我试图创建一个快速和简单的管理界面,为作曲家列出的乐器在一段音乐。我要找的是一个单一的实体,一个仪器,它定义了一种特殊的乐器组合。例如,萨克斯管四重奏可能包括:

  1. Alto sax
  2. 男高音sax
  3. 男中音sax

但它也可能由两个阿尔托斯,男高音和巴里组成。当你尝试添加一个完整的部分(比如第一小提琴--多达18个成员)时,问题会变得更糟。

我最初想出的模型如下:

代码语言:javascript
复制
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和数据库设计),我就有一个映射表

仪器仪表:

  • composition_id (FK),

  • instrument_id (FK)

似乎Django正在为我在数据库中创建这种情况,但出于某种原因,框架需要typecomposition_idinstrument_id在一起是唯一的。管理界面(多选择框)也清楚地表明,拥有多个相似的条目并不是多到多个字段所设计的工作方式。那我怎么做到这一点呢?有现成的解决办法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-05-06 23:18:43

选择的this question答案解决了这个问题。我需要显式定义映射表,然后使用admin内联特性来修复接口。

models.py:

代码语言:javascript
复制
class Instrumentation(models.Model):
    forces = models.ManyToManyField(Instrument, through='InstrumentationForces')
    types = models.ManyToManyField('InstrumentationType')

class InstrumentationForces(models.Model):
    instrument = models.ForeignKey(Instrument)
    instrumentation = models.ForeignKey(Instrumentation)

admin.py:

代码语言:javascript
复制
class InstrumentInline(admin.TabularInline):
    model = InstrumentationForces
    extra = 3

class InstrumentationAdmin(admin.ModelAdmin):
    filter_horizontal = ('types',)
    inlines = (InstrumentInline,)
admin.site.register(Instrumentation, InstrumentationAdmin)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10474959

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档