如何在ManyToMany关系中使用带有可编辑字段的TabularInline?

Ste*_*der 7 django many-to-many django-admin

我的模型包含多对多关系.Measurements可以是任何数量的一部分DataSets.

# models.py
from django.db import models

class DataSet(models.Model):
    purpose = models.TextField()

class Measurement(models.Model):
    value = models.IntegerField()
    sets = models.ManyToManyField(DataSet, null=True, blank=True,
                         verbose_name="datasets this measurement appears in")
Run Code Online (Sandbox Code Playgroud)

我希望我的管理界面能够MeasurementDataSet管理员中内联字段,就像TabularInline使用ForeignKey字段一样.这是我到目前为止:

# admin.py
from django.contrib import admin
from myapp.models import Measurement, DataSet

class MeasurementInline(admin.TabularInline):
    model = Measurement.sets.through

class DataSetAdmin(admin.ModelAdmin):
    inlines = [MeasurementInline]

admin.site.register(DataSet, DataSetAdmin)
Run Code Online (Sandbox Code Playgroud)

不幸的是,我得到的只是带有"+"按钮的下拉框,打开了测量管理员.我希望实际的Measurement字段value在内联中公开.我尝试添加value到MeasurementInline上的字段列表:

# admin.py    
class MeasurementInline(admin.TabularInline):
    model = Measurement.sets.through
    fields = ['value']
Run Code Online (Sandbox Code Playgroud)

但这给了我一个错误:'MeasurementInline.fields' refers to field 'value' that is missing from the form..

如何MeasurementDataSet管理员中公开可编辑字段?

注:这是一个简化的案例; 我的真实案例在其Measurement模型中有许多字段.如果使用管理界面的人必须打开一个新窗口来输入数据,那将是非常繁琐的,特别是因为他们还需要在字段之间进行一些复制和粘贴.

即使在我的真实世界模型中,我希望用户内联编辑的数据也不描述DataSetMeasurement- 只有Measurement自身之间的关系.我认为这使得中间模型不适合我的目的.

Ham*_*mms 5

简短的回答:你做不到.

答案很长:你不能没有大幅编辑django的ModelAdmin.它使用的InlineFormset工厂非常有限,目前无法处理ManyToManyInlines.使用ForeignKeys支持InlineModelAdmin对象.

抱歉.