Django admin 2.2.2 TabularInline / StackedInline表单附加字段

时间:2019-06-26 17:15:04

标签: python django django-forms django-admin

我正在使用Django 2.2.2版

我正在使用Django管理网站。 我有一个名为 Author 的课程,另一个名为 Book 的课程。 作者可以拥有许多书籍。

我在Django管理员中将图书配置为TabularInline。

到目前为止还可以。

现在,我想在BookInline表单上添加一些额外的动态字段。

课程:

from django.db import models

# Create your models here.
class Author(models.Model):
    name = models.CharField(max_length=100, unique=True)

    def __str__(self):
        return self.name


class Book(models.Model):
    author = models.ForeignKey(Author, on_delete=models.PROTECT)
    name = models.CharField(max_length=100, unique=True)

    def __str__(self):
        return self.name

管理员配置:

from django import forms
from django.contrib import admin

from books.models import Book, Author


# Register your models here.
class BookForm(forms.ModelForm):
    class Meta():
        fields = '__all__'
        model = Book

class BookInline(admin.TabularInline):
    model = Book
    extra = 1
    form = BookForm


@admin.register(Author)
class AuthorAdmin(admin.ModelAdmin):
    inlines = [
        BookInline,
        ]

我在表单上尝试了此操作,但是没有出现在页面表单上:


class BookForm(forms.ModelForm):
    class Meta():
        fields = '__all__'
        model = Book

    def __init__(self, *args, **kwargs):
        forms.ModelForm.__init__(self, *args, **kwargs)
        self.fields['extra_1'] = forms.CharField(max_length=200)

以另一种方式显示该字段。但是我需要它是动态创建的,而不是静态创建的。


class BookForm(forms.ModelForm):
    extra_field = forms.CharField(label='extra_field', max_length=100)
    class Meta():
        fields = '__all__'
        model = Book

如何在TabularInline或StackedInline使用的表单上动态添加一些额外字段?

0 个答案:

没有答案