web-dev-qa-db-ja.com

Django管理サイトでインラインManyToManyFieldsを有効にするにはどうすればよいですか?

本と著者のモデルがあるとしましょう。

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

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

各本に複数の著者を持たせたいのですが、Django管理サイトで、編集ページから1冊の本に複数の新しい著者を一度に追加できるようにしたいのです。著者に本を追加する必要があります。

これは可能ですか?もしそうなら、それを達成するための最良および/または最も簡単な方法は何ですか?

23
Alistair

私があなたを正しく理解しているなら、あなたが望むことをするのは非常に簡単です:

アプリディレクトリ内に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)
27
Prateek

これを試して:

_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に追加する必要があるかもしれません。

19
Andrey Fedoseev
8
darren