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

标签 python django django-admin

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

这是我的模型.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”个选项的复选框。

最佳答案

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

在第一种情况下,您必须删除 ForeignKeyAuthor并添加 ForeignKeyBookAuthor - 并使用 AdminInlineAuthor如果您希望能够从 AuthorAdmin 向作者添加书籍.

在第二种情况下,您需要一个 ManyToManyField , 可以在 Book 中或 Author ...

关于python - 如何在 Django 中动态添加字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34770316/

相关文章:

python - 对象词在 Django 中自动分配给模型

python - Django-admin.py 在我的共享主机环境中产生错误

python - 类型错误 : Odd-length string when decoding hex string

python - 使用 IN 运算符在 pandas.Series 中查找字符串

Django 通过不同于 id 生成组

django - Django 模型中的密码字段

python - 带有选项的 Sublime Text 构建系统

python - 将 utf 转换为它们的真实符号

c# - 在 C# 中压缩字符串并在 python 中解压缩

python - 从普通函数调用 django 模板标签