Как я могу включить встроенные ManyToManyFields на моем административном сайте Django? - PullRequest
21 голосов
/ 03 февраля 2011

Допустим, у меня есть Книги и Авторские модели.

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

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

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

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

Ответы [ 3 ]

26 голосов
/ 03 февраля 2011

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

Вам следует создать файл 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)
17 голосов
/ 05 декабря 2013

Попробуйте это:

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, если у вас много авторов.

8 голосов
/ 03 февраля 2011
...