2012-04-01 6 views
0

안녕 유래 사람들,장고 : ManyToMany 위젯은 이중 목록으로

을 표시되지 않습니다

나는 이중 친화적 더 많은 사용자에게 (그리고 나중에 실제 장고 사이트에서) 관리자 페이지에서 M2M 위젯을 변경하려면 목록 (예 : one)

나는 django.contrib.admin.widgets.FilteredSelectMultiple이 나를 대신 할 수 있음을 이해합니다. 그러나, 나는 그것을 작동하게하는 데 어려움이있다. 내 admin.py에 아래 코드를 추가했지만 관리 앱에서 모델을 볼 때 위젯이 변경되지 않습니다.

here에서 코드를 채택하려고했습니다. 모든 SupplierProfile은 WorldBorder 모델 (GeoDjango example 기준)의 하나 이상의 국가에 연결해야합니다.

코드의 결함은 어디에 있습니까? 나는 그것이 왜 표시되지 않을지 알 수 없다. 도움을 주셔서 감사합니다. admin.py

from django import forms 
from django.contrib.admin.widgets import FilteredSelectMultiple 
from django.contrib.gis import admin 
from django.utils.translation import ugettext_lazy as _ 

from apps.profile.models import (UserProfile, 
            SupplierProfile) 
from apps.gis_data.models import WorldBorder 


class WorldBorderAdmin(admin.ModelAdmin): 
    filter_horizonal = ('name',) 

class SupplierProfileAdminForm(forms.ModelForm): 
    distribution_location_country = forms.ModelMultipleChoiceField(
     queryset = WorldBorder.objects.all(), 
      required = False, 
      widget = FilteredSelectMultiple(
      verbose_name = _('Distribution Country'), 
      is_stacked=False 
     ) 
    ) 

    class Meta: 
     model = SupplierProfile 

    def __init__(self, *args, **kwargs): 
     super(SupplierProfileAdminForm, self).__init__(*args, **kwargs) 

     if self.instance: 
      self.fields['distribution_location_country'].initial = self.instance.distribution_location_country.all() 

    def save(self, commit=True): 
     profile = super(SupplierProfileAdminForm, self).save(commit=False) 

     profile.distribution_location_country = self.cleaned_data['distribution_location_country'] 

     if commit: 
      profile.save() 
      profile.save_m2m() 

     return profile 

class SupplierProfileAdmin(admin.ModelAdmin): 
    form = SupplierProfileAdminForm 

admin.site.register(SupplierProfile, admin.OSMGeoAdmin) 

업데이트 코드는 아래에 언급 한 바와 같이 이중 목록을 정의 할 수 있습니까? "distribution_location_country"는 SupplierProfile의 m2m 필드입니다. 웬일인지, 그것은 아직도 끝나지 않고있다.

from django import forms 
from django.contrib.admin.widgets import FilteredSelectMultiple 
from django.contrib.gis import admin 

class SupplierProfileAdmin(admin.OSMGeoAdmin): 
    filter_horizontal = ('distribution_location_country',) 

admin.site.register(SupplierProfile, SupplierProfileAdmin) 

답변

1

귀하의 register 라인이 잘못된 것 같다 :

admin.site.register(SupplierProfile, admin.OSMGeoAdmin) 

등록하지 않는 모델과 SupplierProfileAdmin을 사용자 정의. 나는 이것에 대해 확실하지 않다,
class SupplierProfileAdmin(admin.OSMGeoAdmin): 
    form = SupplierProfileAdminForm 

와 레지스터 라인은 또한

admin.site.register(SupplierProfile, SupplierProfileAdmin) 

수 있지만 :

은 아마 당신은 SupplierProfileAdmin의 기본 클래스 OSMGeoAdmin 대신 ModelAdmin되고 싶어 당신은 그냥 사용할 수 있습니다

filter_horizonal = ('name_of_the_m2m_field_on_the_model',) 

SupplierProfileModel 양식의 해당 사용자 정의 필드 대신에?

+0

안녕하세요. 올바른 등록 정보는 무엇입니까? -> admin.site.register (SupplierProfile, admin.SupplierProfileAdmin) 또는 -> admin.site.register (SupplierProfile, SupplierProfileAdmin)? 첫 번째 매개 변수를 사용하면 다음 오류가 발생합니다. "AttributeError 예외 값 : v'module '개체에'SupplierProfileAdmin '특성이 없으므로 두 번째 솔루션에서도 오류가 발생합니다. 도와 줘서 고마워! – neurix

+0

@neurix 첫 번째는 오타였습니다. 두 번째 오류는 무엇입니까? 올바른 것으로 보입니다. 기본 클래스 조정을 시도 했습니까? 내 편집을 참조하십시오. – agf

+0

도움 주셔서 감사합니다! 귀하의 게시물에서 변경 사항과 함께, 나는 "인스턴스가 일대일 키 값을 가지고 다래 대 관계를 사용할 수 있기 전에 새로운 오류가 발생합니다." 이전에 "filter_horizontal"을 시도했지만 작동하지 않았습니다. 더 나은 해결책이 될 것입니다. 새로운 오류에 대해 생각하십니까? 기본 키는 어떻게 할당합니까? – neurix

관련 문제