Мои модели содержат отношение "многие ко многим". Измерения
могут быть частью любого количества DataSet
.
# 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
admin например, как 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)
К сожалению, все, что я получаю, - это выпадающие списки с кнопками «+» рядом с ними, которые открывают администратора измерений. Я хочу, чтобы фактическое значение поля измерения
отображалось во встроенном. Я попытался добавить значение
в список полей в MeasurementInline:
# admin.py
class MeasurementInline(admin.TabularInline):
model = Measurement.sets.through
fields = ['value']
Но это привело к ошибке: 'MeasurementInline.fields'
Это упрощенный случай; в моем реальном случае много полей в модели
Measurement
. Было бы ужасно утомительно, если бы людям, использующим интерфейс администратора, пришлось бы открывать новое окно для ввода данных, тем более, что им также нужно будет делать некоторое копирование и вставку между полями.
Даже в моих реальных моделях, данные, которые я хочу, чтобы пользователи редактировали в строке, НЕ описывают взаимосвязь между DataSet
и Measurement
- только само Measurement
. Я считаю, что это делает промежуточную модель непригодной для моих целей.