我的模型包含多对多关系。 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")

我希望我的管理界面可以内嵌Measurement管理员中的DataSet字段,就像TabularInlineForeignKey字段如何工作一样。这是我到目前为止的内容:
# 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)

不幸的是,我得到的只是下拉框,旁边带有“+”按钮,可以打开Measurement admin。我希望实际的Measurement字段value在内联中公开。我尝试将value添加到MeasurementInline的字段列表中:
# admin.py
class MeasurementInline(admin.TabularInline):
    model = Measurement.sets.through
    fields = ['value']

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

如何在Measurement管理员中公开DataSet的可编辑字段?

笔记:
这是一个简化的情况。我的真实案例的Measurement模型中有很多字段。如果使用管理界面的人不得不打开一个新窗口来输入数据,那将是非常繁琐的,尤其是因为他们还需要在字段之间进行一些复制和粘贴。

即使在我的真实模型中,我希望用户内联编辑的数据也不能描述DataSetMeasurement之间的关系-只是Measurement本身。我认为这使中介模型不适合我的目的。

最佳答案

简短的答案:您不能。

答案很长:您不能不对django的ModelAdmin进行大量编辑。它使用的InlineFormset工厂非常有限,并且当前无法处理ManyToManyInlines。仅外键支持InlineModelAdmin对象。

对不起。

关于django - 如何在ManyToMany关系上将TabularInline与可编辑字段一起使用?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5797915/

10-12 17:13