django crispy表单内嵌表单

django crispy表单内嵌表单,django,django-forms,django-crispy-forms,Django,Django Forms,Django Crispy Forms,我试图采用简洁的表单和引导,尽可能多地使用它们的功能,而不是一次又一次地发明一些东西 有没有一种方法可以像django admin表单那样,通过crispy forms/bootstrap实现内联表单功能 以下是一个例子: class NewProjectForm(forms.Form): name = forms.CharField(required=True, label=_(u'Название проекта'), widget=forms.TextInput(attrs={'c

我试图采用简洁的表单和引导,尽可能多地使用它们的功能,而不是一次又一次地发明一些东西

有没有一种方法可以像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)
它将显示一个体面的形式:

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

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')
因此,将有一个项目和名称/url链接以及添加许多链接的方法,就像在django admin中做的一样,您可以添加额外的“行”,其中包含与主模型相关的数据。在下面的屏幕上,您可以填写“问题”对象的数据,在下面的屏幕上,您可以添加问题选项对象的数据-您可以单击“+”图标添加所需数量的问题选项

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


如果使用基于类的视图,则可以使用。

您所指的内联表单在Django中称为表单集。如果您想了解更多关于表单集的信息,可以在中找到它们

Crispy支持呈现内联表单集,如中所述

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


如果您想要像Django管理员中那样的“添加更多”按钮,则需要使用一些Javascript来动态添加这些行

此问题更详细地介绍了动态“添加更多”按钮: