Django使用Formset和Crispy-Forms动态添加和删除表单

时间:2019-12-09 04:59:01

标签: django django-crispy-forms

给予

class Library(models.Model):
    name = models.CharField(max_length=100)

class Book(models.Model):
    for_library = models.ForeignKey(Library, null=False, on_delete=models.PROTECT)
    title = models.CharField(max_length=200)
    author = models.CharField(max_length=100)

说我已经创建了一个ID为1的Library对象,并想以某种形式为此选定的图书馆创建多本书。

在表单中,我有:

class LibraryIDForm(ModelForm):
    for_library = TypedChoiceField(coerce='int', empty_value=None)

    class Meta:
        model = Library
        fields = ()

    def __init__(self, *args, **kwargs):
        super(LibraryIDForm, self).__init__(*args, **kwargs)
        self.helper = FormHelper()
        self.helper.layout = Layout(
        Div(
            Field('for_library'),
            HTML("""<p class="h4">Add Books</p>"""),
            Fieldset('', 
                CreateBooksFormset('books'))),
            ButtonHolder(Submit('submit', 'Add Books')),
        )

class CreateMultipleBooksForm(ModelForm):
    class Meta:
        fields = ['title', 'author']    
# Formsets ################################################################
CreateBooksFormset = formset_factory(CreateMultipleBooksForm,
    extra=2, min_num=1, max_num=20, can_delete=False)

如何呈现书籍形式,使每个字段都有指定的宽度?另外,如何添加JS以动态添加/删除列表中的图书?请记住,我想利用crispyforms来做到这一点。

0 个答案:

没有答案