django脆皮形式的内联形式

abo*_*nov 5 django django-forms django-crispy-forms

我正在尝试采用crispy-forms和bootstrap,尽可能多地使用它们的功能,而不是一遍又一遍地发明一些东西.

有没有办法使用像django-admin表单那样的crispy-forms/bootstrap具有内联表单功能?

这是一个例子:

class NewProjectForm(forms.Form):
    name = forms.CharField(required=True, label=_(u'???????? ???????'), widget=forms.TextInput(attrs={'class':'input-block-level'}))
    group = forms.ModelChoiceField(required=False, queryset=Group.objects.all(), label=_(u'?????? ????????'), widget=forms.Select(attrs={'class':'input-block-level'}))
    description = forms.CharField(required=False, label=_(u'???????? ???????'), widget=forms.Textarea(attrs={'class':'input-block-level'}))

    class Meta:
        model = Project
        fields = ('name','description','group')

    def __init__(self, *args, **kwargs):
        self.helper = FormHelper()
        self.helper.form_class = 'horizontal-form'
        self.helper.form_action = 'submit_new_project'
        self.helper.layout = Layout(
            Field('name', css_class='input-block-level'),
            Field('group', css_class='input-block-level'),
            Field('description',css_class='input-block-level'),
        )
        self.helper.add_input(Submit('submit',_(u'??????? ??????')))
        self.helper.add_input(Submit('cancel',_(u'? ?????????')))
        super(NewProjectForm, self).__init__(*args, **kwargs)
Run Code Online (Sandbox Code Playgroud)

它会显示一个体面的形式:

使用香脆形式呈现的单个表单的示例

如何添加基本代表此模型的表单:

class Link(models.Model):
    name = models.CharField(max_length=255, blank=False, null=False, verbose_name=_(u'????????'))
    url = models.URLField(blank=False, null=False, verbose_name=_(u'??????'))
    project = models.ForeignKey('Project')
Run Code Online (Sandbox Code Playgroud)

因此会有一个项目和名称/网址链接以及添加许多内容的方式,就像在django-admin中完成相同的事情一样,您可以使用与主模型相关的数据添加额外的"行".在下面的sreenshot中,您可以填写"问题"对象和下面的数据,您可以为QuestionOption对象添加数据 - 您可以单击"+"图标以添加任意数量的QuestionOptions.

我不是在寻找一种方法来从模型中自动生成表单(这很好但不是最重要的) - 有没有办法构建一个表单,可以让你添加像'django-admin那样的'行'数据?

django-admin的屏幕截图

pub*_*her 6

您引用的内联表单在Django中称为Formsets.如果您想了解有关formset的更多信息,可以在Django表单文档中找到它们.

Crispy支持渲染内联表单集,如"渲染表单集"一节所述

请注意,默认情况下,formsets显示3个额外的内联表单,允许您再添加三个对象.保存后,您再次获得三个额外的内联表单集以添加更多内容.

如果你想要一个像Django Admin那样的"添加更多"按钮,你需要使用一些Javascript来动态添加这些行.