Django:在基于类的视图中使用crispy样式的formset

时间:2012-08-23 11:18:31

标签: django django-class-based-views django-forms django-crispy-forms

嗨Stackoverflow人,

我想用脆弱的应用程序设置一个formset,但它会引起一些悲伤。

一个非常简单的模型应该呈现四次。

class ItemPicture(models.Model):
    item = models.ForeignKey('Item')
    picture = ThumbnailerImageField(_('Image'),
            upload_to='pictures/', null=True, blank=True,)

表单类也很简单:

class ItemPictureForm(forms.ModelForm):
    class Meta:
        model = ItemPicture
        fields = ('picture',)

    def __init__(self, *args, **kwargs):
        self.helper = FormHelper()
        self.helper.form_tag = False
        self.helper.layout = Layout(
                Fieldset(_('Add pictures'),'picture', ),
                ButtonHolder(
                    Submit('save', _('Add'), css_class='btn btn-primary '),
                    Reset('reset', _('Cancel'), css_class='btn')))
        super(ItemPictureForm, self).__init__(*args, **kwargs)

在我的views.py中,我生成了formset:

class ItemUploadPictures(FormView):
    ItemPictureFormSet = formset_factory(ItemPictureForm, extra=4)
    form_class = ItemPictureFormSet
    template_name = 'item_upload_pictures.html' 
    success_url = reverse_lazy('dashboard') 

我的麻烦是crispy在模板中需要{% crispy formset formset.form.helper %},但似乎传递的变量是form{% crispy form %}有效,但不会显示任何辅助属性。 如何将整个formset信息传递给模板?

感谢您的建议。

3 个答案:

答案 0 :(得分:3)

你试过吗

{% crispy formset form.form.helper %}

答案 1 :(得分:2)

forms.py

class ItemPictureForm(forms.ModelForm):
    class Meta:
        model = ItemPicture
        fields = ('picture',)

    def __init__(self, *args, **kwargs):
        self.helper = FormHelper()
        self.helper.form_tag = False
        self.helper.layout = Layout(
                Fieldset(_('Add pictures'),'picture', ),
        # These need to be removed because they cant be prevented from duplicating
        #       ButtonHolder(
        #           Submit('save', _('Add'), css_class='btn btn-primary '),
        #           Reset('reset', _('Cancel'), css_class='btn')
        ))
        super(ItemPictureForm, self).__init__(*args, **kwargs)

manage_pictures.html

{% load crispy_forms_tags i18n %}
<form action="" method="post">
    {% csrf_token %}
    {% crispy formset formset.form.helper %}
    <div class="form-actions">
        <input type="submit" name="save" value="{% trans "Add" %}" class="btn btn-primary" id="submit-id-save"> 
        <input type="button" name="reset" value="{% trans "Cancel" %}" class="btn" id="button-id-cancel">
    </div>
</form>
{% crispy formset formset.form.helper %}

答案 2 :(得分:0)

也许这个图书馆满足您的需求:https://github.com/runekaagaard/django-crispy-forms-fancy-formsets