2016-01-13 62 views
1

我想在Django 1.8中動態添加字段。如何在Django中動態添加字段?

這裏是我的models.py

class Book(models.Model): 
    title = models.CharField(max_length=100) 

    def __str__(self): 
     return self.title 

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

    def __str__(self): 
     return self.name 

這裏是我的admin.py

class AuthorAdmin(admin.ModelAdmin): 
admin.site.register(Author, AuthorAdmin) 

class BookAdmin(admin.ModelAdmin): 
admin.site.register(Book, BookAdmin) 

下面是它現在的樣子:

enter image description here

我試着使用Inline ,但我只能添加一本新書。

我希望能夠動態地向一位作者添加許多書籍。 類似這樣的: enter image description here

我該怎麼做?

編輯:

我已經改變了AuthorAdmin這樣:

class AuthorAdmin(admin.ModelAdmin): 
    formfield_overrides = { 
     models.ManyToManyField: {'widget': CheckboxSelectMultiple}, 
    } 
admin.site.register(Author, AuthorAdmin) 

enter image description here

但不是一個複選框以 「N」 的選項,我想 「N」 文本框來選擇書籍。

回答

1

您需要使用ManyToMany領域的書:

books = models.ManyToManyField(Book) 

Django docManyToMany

+0

一個'ManyToManyField'意味着一個'Book'可以有多個作者。雖然這對於「真實世界」來說是有意義的,但它並不是必要的適用於OP應用程序的合適的領域模型。 –

3

你得到了你的基數錯誤的方式。正如你寫的那樣,關係是「一個作者有一本書,一本書有很多作者」,而你顯然希望「一本書有一個作者,一個作者有很多書」 - 或者可能是「作爲一個或多個作者的書,作者有一本或多本書「。

在第一種情況下,你必須刪除在AuthorForeignKeyAuthor添加ForeignKeyBook - 如果你希望能夠以書從AuthorAdmin添加到作者在Author使用AdminInline

在第二種情況下,你想有一個ManyToManyField,它可以在任何BookAuthor ...