Мои модели содержат отношение многие ко многим. 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)
К сожалению, все, что я получаю, это выпадающие списки с кнопками «+» рядом с ними, которые открывают Администратор измерений. Я хочу, чтобы фактическое поле измерения 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
admin?
Примечания:
Это упрощенный случай; В моем реальном случае в его модели Measurement
много полей. Было бы ужасно утомительно, если бы людям, использующим интерфейс администратора, пришлось открывать новое окно для ввода данных, особенно потому, что им также нужно было бы выполнить некоторое копирование и вставку между полями.
Даже в моих реальных моделях данные, которые я хочу, чтобы пользователи редактировали inline, НЕ описывают отношения между DataSet
и Measurement
- только сама Measurement
. Я считаю, что это делает посредническую модель непригодной для моих целей.