2011-04-27 2 views
7

내 모델에는 다 대다 관계가 있습니다. MeasurementsDataSets의 숫자 중 일부가 될 수 있습니다.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 필드처럼 인라인 내 관리 인터페이스를 원하는 방법 ForeignKey 필드가 TabularInline 작동합니다. 이것은 내가 지금까지 무엇을 가지고 : 불행하게도

# 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이 인라인에 노출되기를 원합니다.

# admin.py  
class MeasurementInline(admin.TabularInline): 
    model = Measurement.sets.through 
    fields = ['value'] 

을하지만 그것은 나에게 오류가 있습니다 : 나는 MeasurementInline에 필드 목록에 value을 추가하는 시도 'MeasurementInline.fields' refers to field 'value' that is missing from the form.합니다.

Measurement의 편집 가능한 입력란을 DataSet 관리자에게 표시하려면 어떻게해야하나요?

참고 : 이것은 단순화 된 사례입니다. 제 실제 사례는 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() 

을 그리고 당신의 관리자에. 평, 단순히 :

class MeasurementInline(admin.TabularInline): 
    model = Measurement 

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

admin.site.register(DataSet, DataSetAdmin) 

그리고 사용 model = Measurement.sets.through는하건에 이상한 모습은 어쩌면 내가 완전히 요점을 놓친?

+0

측정에서 데이터 세트로 돌아 가기 때문에이 기능이 작동하지 않습니다. – Shayne

관련 문제