Как включить встроенный ManyToManyFields на моем сайте администратора Django?

Скажем, у меня есть книги и авторские модели.

class Author(models.Model):
    name = CharField(max_length=100)

class Book(models.Model):
    title = CharField(max_length=250)
    authors = ManyToManyField(Author)

Я хочу, чтобы в каждой книге было несколько авторов, а на административном сайте Django я хочу иметь возможность добавлять несколько новых авторов в книгу со страницы "Редактировать" за один раз. Мне не нужно добавлять книги к авторам.

Возможно ли это? Если да, то какой лучший и/или самый простой способ сделать это?

Ответ 1

Очень просто делать то, что вы хотите, если я правильно вас понимаю:

Вам необходимо создать файл admin.py внутри каталога ваших приложений, а затем написать следующий код:

from django.contrib import admin
from myapps.models import Author, Book

class BookAdmin(admin.ModelAdmin):
     model= Book
     filter_horizontal = ('authors',) #If you don't specify this, you will get a multiple select widget.

admin.site.register(Author)
admin.site.register(Book, BookAdmin)

Ответ 2

Попробуйте следующее:

class AuthorInline(admin.TabularInline):

    model = Book.authors.through
    verbose_name = u"Author"
    verbose_name_plural = u"Authors"


class BookAdmin(admin.ModelAdmin):

    exclude = ("authors", )
    inlines = (
       AuthorInline,
    )

Вам может потребоваться добавить raw_id_fields = ("author", ) в AuthorInline, если у вас много авторов.