В Django Admin я хочу изменить способ отображения внешних ключей в виджете администрирования «многие-многие» - PullRequest
2 голосов
/ 18 сентября 2009

У меня есть отношения 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) Как я могу использовать лучший виджет, чем MultipleSelectList для ManyToMany. Как я могу указать вместо этого использовать CheckBoxSelectList?

Ответы [ 2 ]

2 голосов
/ 19 сентября 2009

Чтобы отобразить ISBN, вы можете создать настраиваемое поле, например:


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

Для ManyToManyField есть CheckboxSelectMultiple , но он не отображается корректно на администраторе, поэтому вы также можете написать несколько css, чтобы это исправить.

Вам необходимо создать форму для модели и использовать ее в своем классе администратора:


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
1 голос
/ 18 сентября 2009

Для 2) используйте это в своем классе AuthorAdmin:

raw_id_fields = ['books']

Проверьте здесь: http://docs.djangoproject.com/en/dev/ref/contrib/admin/#ref-contrib-admin для получения инструкций по созданию пользовательского класса ModelAdmin. Я сам много думал об этом для своего собственного проекта Django, и я думаю, что 1) потребовалось бы изменить шаблон администратора для просмотра объектов Author.

...