2014-01-15 2 views
0

다른 모델에서 내 모델의 일부 필드를 정의하고 싶습니다. 여기에 : 나는 Django에서 ManyToMany가있는 동적 필드 관리자

나는이 어떻게 할 수있는 Options.name

의 선택 상자 CarAdmin에 필드로 모든 Settings.name을 할 관리자에서

class Setting(models.Model): 
    name = models.CharField(max_length=255) 

    def __unicode__(self): 
     return self.name 

class Option(models.Model): 
    name = models.CharField(max_length=255) 
    setting = models.ForeignKey(Setting) 

    def __unicode__(self): 
     return self.name 

class Car(models.Model): 
    hsn = models.PositiveIntegerField("HSN", max_length=4) 
    tsn = models.PositiveIntegerField("TSN", max_length=3) 
    mileage = models.PositiveIntegerField("Kilometerstand") 
    settings = models.ManyToManyField(Setting) 

?

+0

modeladmin이 사용할 고유 한 양식을 만드시겠습니까? – yuvi

답변

0

비슷한 문제를 해결하고 아래에서 해결했습니다. 트릭을 수행해야한다고 생각합니다.

자동차 변경 양식에 인라인으로 설정을 적용하고 인라인 설정에서 옵션쪽으로 M2M 필드를 지정하여 위젯을 재정 의하여 체크 박스로 표시하십시오. 당신의 admin.py에서

class Option(models.Model): 
    name = models.CharField(max_length=255) 

    def __unicode__(self): 
     return self.name 

class Car(models.Model): 
    hsn = models.PositiveIntegerField("HSN", max_length=4) 
    tsn = models.PositiveIntegerField("TSN", max_length=3) 
    mileage = models.PositiveIntegerField("Kilometerstand") 

    def __unicode__(self): 
     return self.hsn 


class Setting(models.Model): 
    name = models.CharField(max_length=255) 
    options = models.ManyToManyField(Option, blank=True, null=True) 
    car = models.ForeignKey(Car, blank=True, null=True) 

    def __unicode__(self): 
     return self.name 

: 당신의 models.py에서

from django.forms import CheckboxSelectMultiple 

class OptionAdmin(admin.ModelAdmin): 
    pass 

admin.site.register(Option, OptionAdmin) 

class SettingInline(admin.TabularInline): 

    model = Setting 
    formfield_overrides = { 
     models.ManyToManyField: {'widget': CheckboxSelectMultiple}, 
    } 


class CarAdmin(admin.ModelAdmin): 
    inlines = [ 
     SettingInline 
    ] 

admin.site.register(Car, CarAdmin) 

등의 모든 설정 또는 잘못된 도움말 텍스트에 대한 일반적인 옵션으로이 솔루션과 함께 몇 가지주의,있을 수 있습니다 체크 박스 아래에 추가로 보지는 않았지만 수정 가능해야합니다.