2011-10-02 3 views
2

django 관리자의 변경 목록에서 listToLayout을 사용하여 ManyToManyField에 대한 django-autocomplete 위젯을 표시하려고합니다. 일반적으로 list_display에서 ManyToManyField 포함장고 관리자 변경 목록의 ManyToManyField 위젯?

list_editable and widgets이 ImproperlyConfigured 예외가 발생, 예를 들면 :

"" 'BookAdmin.list_display [2]', '저자'는 것입니다

은 여기 비슷한 발견 지원되지 ManyToManyField. "

난 (아마도 현명) 예외를 우회있는 contrib/관리/validate.py 3 개 라인을 제거했다. :

이제는 다음과 같은 것을 뱉어 낼 수 있습니다. 가까운 (?)이지만 시가는 없습니다. 0x1032a85d0 >

진행하는 방법에 대한 생각에서

< django.db.models.fields.related.ManyRelatedManager 객체? 이 작업을 수행하는 더 좋은 방법이 있습니까?

는 여기이 순간에이 작업은 다음과 같습니다

class AuthorAutocomplete(AutocompleteSettings): 
    search_fields = ('first_name', 'last_name') 

class BookAdmin(AutocompleteAdmin, admin.ModelAdmin): 
    def get_changelist_form(self, request, **kwargs): 
     kwargs.setdefault('form', AuthorAutocompleteForm) 
     return super(BookAdmin, self).get_changelist_form(request, **kwargs)  
     list_display = ['isbn', 'title', 'author', 'publisher'] 
     #... 

class AuthorAutocompleteForm(forms.ModelForm): 
    class Meta: 
     model = Book 
    author = AuthorAutocomplete 

감사 (AuthorAutocomplete는 일반 관리자 형태로 잘 작동)!

+4

나쁜 개발자, 나쁜. Django 소스를 변경하지 마십시오. 나는 이것을 스스로 시도하지 않았지만, 관리자 애플 리케이션이 명시 적으로'ManyToManyFields'를 금지하면 거기에 이유가있다. 뭔가 어딘가에 모델을 저장하는 과정에서 제대로 작동하지 못합니다. 중요한 기능인 경우 버그를 신고하는 것이 좋습니다. 그렇지 않으면 운이 나빠질 수 있습니다. Django 소스에 패치를 적용하면 앞으로 개발자가 코드를 상속하는 불쌍한 개발자를 위해 유지 관리의 악몽을 꾸려 나갈 것입니다. –

답변

6

이것은 오래된 주제이지만, 다른 사람들에게 도움이되기를 바랍니다.

값을 표시 할 수 있도록 ManyToMany 필드의 값을 가져 오려면 다음을 수행 할 수 있습니다. 예를 들어 list_display를 사용하고 있습니다.

class TestAdmin(admin.ModelAdmin): 
    def get_some_value(self): 
     return ", " . join([x.__str__() for x in self.manytomany_field.all()]) 

    list_display(get_some_value) 
    get_some_value.short_description = 'Title' #sets column header to Title 
0

어리석은 나를. 나는 William의 manytomany_field가 내장 된 ModelAdmin 객체라고 생각했다. 그래서 나는 그의 코드를 그대로 (조인 후에 누락 된 괄호를 넣은 후에) 실행했다.

이상하게도 오류 메시지가 표시되지 않고 실행되었습니다. 그러나 (가치 없음을 얻으려고했을 때) (없음)이 나타났습니다. 그리고 나는 "django model.Admin.manytomany_field"를 인터넷으로 검색했을 때 아무것도 찾을 수 없다는 것이 이상하다고 생각했습니다. 하!

그래서 마침내 나는 manytomany_field 대신 many-to-many 필드의 이름을 넣어야한다는 것을 알게되었습니다. 그것은 작동합니다!