Django admin 2.2.2 дополнительные поля формы TabularInline / StackedInline - PullRequest
0 голосов
/ 26 июня 2019

Я работаю с Django версии 2.2.2

Я использую админский сайт django. У меня есть класс с именем Author и другой с именем Book . Автор может иметь много книг.

Я настроил книгу как TabularInline в админке django.

Пока все хорошо.

Теперь я хочу добавить несколько дополнительных динамических полей в форму 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?

...