Django Inline Formsets с использованием пользовательской формы

Я использую встроенные формы.

Моя модель:

class Author(models.Model):
    description = models.CharField(max_length=100)

class Book(models.Model):
    author = models.ForeignKey(Author)
    details = models.CharField(max_length=100)

class AuthorForm(ModelForm):
    class Meta:
        widgets = {
            'description': Textarea(attrs={'cols': 40, 'rows': 4}),
        }

В my views.py я сделал форму из AuthorForm как таковой

form = AuthorForm(request.POST)

Но я также сделал набор форм для книг

InlineFormSet = inlineformset_factory(Author, Books)

Я не могу передать в BooksForm с виджетами, так как я могу добавить виджет textarea к деталям книги.

Возможно ли это? Мне что-то не хватает?

Ответ 1

Try:

class BookForm(ModelForm):
    class Meta:
        model = Book
        widgets = {
            'details': Textarea(attrs={'cols': 40, 'rows': 4}),
        }


InlineFormSet = inlineformset_factory(Author, Book, form=BookForm)

Обновление с помощью Wtower

Это здорово. В частности, для виджетов, начиная с Django 1.6, имеется параметр widgets для inlineformset_factory

Похоже, теперь вы можете позвонить

inlineformset_factory(Author, Book, widgets={'details': Textarea(attrs={'cols': 40}))

Ответ 2

Я не знаю, понял ли я ваш вопрос: вы хотите, чтобы Book.details отображались как текстовое поле?

Если это так, просто используйте TextField вместо CharField.

class Author(models.Model):
   description = models.TextField()