如何在Django中动态添加字段?

时间:2016-01-13 15:17:53

标签: python django django-admin

我想在Django 1.8中动态添加字段。

这是我的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"文本框选择书籍。

2 个答案:

答案 0 :(得分:3)

你的基数是错误的。正如你所写的那样,关系是“作者有一本书,一本书有很多作者”,而你显然想要“一本书有一位作者,一位作者有很多书” - 或者可能是“一本书作为一本或多位作者” ,作者有一本或多本书“。

在第一种情况下,您必须移除ForeignKey中的Author并在ForeignKey中向Book添加Author - 并使用{{如果您希望能够从AdminInline向作者添加图书,请在Author中添加1}}。

在第二种情况下,您需要一个AuthorAdmin,它可以位于ManyToManyFieldBook ...

答案 1 :(得分:1)

您需要将ManyToMany字段用于图书:

books = models.ManyToManyField(Book)
ManyToMany

Django doc