Django的脆皮形式直列形式(django crispy-forms inline forms)

2019-08-02 06:48发布

我试图采取脆皮形式和引导,并使用尽可能多的它们的功能成为可能,而不是一遍一遍发明了一些东西。

有没有办法有香脆表单/引导像Django的管理形式有直列方式的功能?

下面是一个例子:

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管理员您可以用与您的主模型数据添加额外的“行”在那里完成。 在下面的撷取画面你可以填写数据“问题”对象,并在下面,你能够为QuestionOption对象 - 你可以点击“+”图标,只要你想添加尽可能多的QuestionOptions添加数据。

我不是在寻找一种方式来获得的形式自动生成的模型(这很好,但不是最重要的) - 是有没有办法建立一个形式,将让你添加数据的“行”像Django的管理员不?

Answer 1:

你指的是直列的形式,在Django被称为表单集。 如果您想了解更多关于表单集,你可以找到他们的Django表单文档 。

脆皮支持呈现内嵌表单集,如在所描述的部分中的“渲染表单集”

请注意,在默认情况下表单集展示3点额外的直列的形式,允许您添加三个对象。 保存之后,你再次获得三个额外的在线表单集增加更多。

如果你想要像在Django管理的“添加更多”按钮,您将需要使用一些JavaScript动态添加的行。



Answer 2:

如果使用基于类的观点,你可以使用Django的额外意见 。



文章来源: django crispy-forms inline forms