2009-09-18 7 views
2

다수 - 많은 관계 관리 위젯에 표시되는 방법을 외래 키를 변경하려면 : 나는 여러 선택 목록을 저자의 관리 인터페이스에서장고 관리자, 나는 내가 ManyToMany 관계가

 
class Book: 
    title = models.CharField(...) 
    isbn = models.CharField(...) 

    def unicode(self): 
    return self.title 

    def ISBN(self): 
    return self.isbn 

class Author: 
    name = models.CharField(...) 
    books = models.ManyToManyField(Book...) 

을 그 도서의 경우 유니 코드 디스플레이를 사용합니다. 두 가지 방법으로 목록을 변경하고 싶습니다.

1) 관리자 인터페이스의 경우에만 ISBN 번호를 표시하고 다른 모든 곳에서는 제목을 표시하려는 "책"개체를 인쇄합니다.

2) 어떻게 ManyToMany에 대해 MultipleSelectList보다 우수한 위젯을 사용할 수 있습니까? 대신 CheckBoxSelectList를 사용하도록 지정할 수 있습니까?
2의

답변

1

), 당신의 AuthorAdmin 클래스에서이를 사용

raw_id_fields = ['books'] 

확인 여기 : http://docs.djangoproject.com/en/dev/ref/contrib/admin/#ref-contrib-admin을 지시 사용자 정의 ModelAdmin 클래스를 만드는. 나는 내 자신의 Django 프로젝트에 대해 많은 것을 생각해 왔으며, 1) Author 객체를보기 위해 admin 템플릿을 수정해야한다고 생각한다.


class BooksField(forms.ModelMultipleChoiceField): 
    def label_from_instance(self, obj): 
     return obj.isbn 

가 ManyToManyField에 대한 CheckboxSelectMultiple을있다하지만 관리자에 올바르게 표시되지 않습니다, 그래서 당신은 또한 해결하기 위해 일부 CSS를 작성할 수

2

ISBN을 표시하려면 다음과 같이 사용자 정의 필드를 만들 수 그.


class AuthorForm(forms.ModelForm): 
    books = BooksField(Book.objects.all(), widget=forms.CheckboxSelectMultiple) 

    class Meta: 
     model = Author 

    class Media: 
     css = { 
      'all': ('booksfield.css',) 
     } 

class AuthorAdmin(admin.ModelAdmin): 
    form = AuthorForm 
:

당신은 모델의 형태를 만들고, 관리 클래스의 것을 사용할 필요가

관련 문제