我试图采用脆皮形式和引导,并尽可能多地使用它们的功能,而不是一遍又一遍地发明一些东西。django脆皮形式内联形式
有没有一种方法可以像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')
所以会有一个项目和名称/网址链接和广告的方式d很多,就像在django-admin中做的一样,你可以在其中添加额外的'行'和与你的主模型相关的数据。在下面的屏幕截图中,您可以填写“问题”对象的数据,并且在下面您可以为QuestionOption对象添加数据 - 您可以单击“+”图标以添加尽可能多的QuestionOptions。
我不是在寻找一种方式来从模型中获取自动生成的表单(这很好,但不是最重要的) - 有没有一种方法来构建一个表单,可以让你添加'行'数据django-admin呢?
这个问题更详细地介绍了动态“添加更多”按钮:http://stackoverflow.com/questions/501719/dynamically-adding-a-form-to-a-django-formset-with-ajax – publysher