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)
我希望我的管理界面能够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)
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..
如何Measurement在DataSet管理员中公开可编辑字段?
注:这是一个简化的案例; 我的真实案例在其Measurement模型中有许多字段.如果使用管理界面的人必须打开一个新窗口来输入数据,那将是非常繁琐的,特别是因为他们还需要在字段之间进行一些复制和粘贴.
即使在我的真实世界模型中,我希望用户内联编辑的数据也不描述DataSet和Measurement- 只有Measurement自身之间的关系.我认为这使得中间模型不适合我的目的.
简短的回答:你做不到.
答案很长:你不能没有大幅编辑django的ModelAdmin.它使用的InlineFormset工厂非常有限,目前无法处理ManyToManyInlines.仅使用ForeignKeys支持InlineModelAdmin对象.
抱歉.
| 归档时间: |
|
| 查看次数: |
888 次 |
| 最近记录: |