Как использовать TabularInline с редактируемыми полями в отношении ManyToMany?

Мои модели содержат отношение "многие ко многим". Измерения могут быть частью любого количества 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 . Я считаю, что это делает промежуточную модель непригодной для моих целей.

7
задан Steven T. Snyder 24 November 2011 в 06:05
поделиться