我的模型包含多对多关系。 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
字段,就像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)
不幸的是,我得到的只是下拉框,旁边带有“+”按钮,可以打开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
模型中有很多字段。如果使用管理界面的人不得不打开一个新窗口来输入数据,那将是非常繁琐的,尤其是因为他们还需要在字段之间进行一些复制和粘贴。即使在我的真实模型中,我希望用户内联编辑的数据也不能描述
DataSet
和Measurement
之间的关系-只是Measurement
本身。我认为这使中介模型不适合我的目的。 最佳答案
简短的答案:您不能。
答案很长:您不能不对django的ModelAdmin进行大量编辑。它使用的InlineFormset工厂非常有限,并且当前无法处理ManyToManyInlines。仅外键支持InlineModelAdmin对象。
对不起。
关于django - 如何在ManyToMany关系上将TabularInline与可编辑字段一起使用?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5797915/