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

2024-09-22 14:23:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我想在django1.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

这是我的管理员.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

我该怎么做?你知道吗

编辑:

我已将authoramin更改为:

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

enter image description here

但是,我希望用“N”文本框来选择书籍,而不是一个带有“N”选项的复选框。你知道吗


Tags: pyselfregistermodeladmintitlemodelssite
2条回答

您需要对图书使用ManyToMany字段:

books = models.ManyToManyField(Book)

Django doc表示ManyToMany。你知道吗

你把基数搞错了。正如你所写的,这种关系是“一个作者有一本书,一本书有许多作者”,而你显然想要“一本书有一个作者,一个作者有许多书”——或者可能是“一本书作为一个或多个作者,一个作者有一本或多本书”。你知道吗

在第一种情况下,您必须删除Author中的ForeignKey,并将ForeignKey添加到Author中的Book,如果您希望能够从AuthorAdmin向作者添加书籍,则必须在Author中使用AdminInline。你知道吗

在第二种情况下,需要一个ManyToManyField,可以是BookAuthor。。。你知道吗

相关问题 更多 >