2011-04-27 38 views
7

我的模型包含多對多關係。 Measurements可以是任何數量的DataSets的一部分。如何在帶有ManyToMany關係的可編輯字段上使用TabularInline?

# 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") 

我希望我的管理界面內聯在DataSet管理Measurement領域就像一個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.

我如何DataSet管理中暴露的Measurement編輯字段?

注: 這是一個簡化的情況下;我的真實案例在其Measurement模型中有許多字段。這將是非常乏味,如果使用管理界面的人不得不開闢一個新的窗口中輸入的數據,尤其是因爲他們需要做的字段之間的一些複製和粘貼爲好。

即使在我的現實世界的模型,我希望用戶在線編輯不介紹DataSetMeasurement之間的關係的數據 - 只有Measurement本身。我相信這會使中介模式不適合我的目的。

回答

5

答案很簡單:你不能。

長的回答:你不能沒有顯着編輯django的ModelAdmin。它使用的InlineFormset工廠極其有限,目前無法處理ManyToManyInlines。 InlineModelAdmin對象與ForeignKeys支持。

對不起。

-1

好了,不知道要真正瞭解該項目你工作,但如果你想測量inlines的數據集,您可能希望把關係中的數據集模型:

class DataSet(models.Model): 
    purpose = models.TextField() 
    measurements = models.ManyToManyField(DataSet, null=True, blank=True) 

class Measurement(models.Model): 
    value = models.IntegerField() 

而在你的管理。 PY,簡單地說:

class MeasurementInline(admin.TabularInline): 
    model = Measurement 

class DataSetAdmin(admin.ModelAdmin): 
    inlines = [MeasurementInline] 

admin.site.register(DataSet, DataSetAdmin) 

而且使用model = Measurement.sets.through看起來奇怪,me.But也許我完全錯了?

+0

這不起作用,因爲沒有foriegnkey從測量到數據集。 – Shayne 2015-02-09 03:43:34

相關問題