【问题标题】:Django: Using crispy styled formsets in a class based viewDjango:在基于类的视图中使用清晰样式的表单集
【发布时间】:2012-08-18 21:29:47
【问题描述】:

你好 Stackoverflow 的人,

我想用脆皮应用程序设置表单集的样式,但这会引起一些悲伤。

一个非常简单的模型应该展示四次。

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中,我生成了表单集:

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 %} 有效,但不会显示辅助属性。 如何将整个表单集信息传递给模板?

感谢您的建议。

【问题讨论】:

  • 将表单集创建为表单的属性,然后执行以下操作:{% crispy form.formset form.formset.form.helper %}。祝你好运。

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


【解决方案1】:

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】:

    也许这个库可以满足您的需求:https://github.com/runekaagaard/django-crispy-forms-fancy-formsets

    【讨论】:

      【解决方案3】:

      你试过了吗

      {% crispy formset form.form.helper %}
      

      【讨论】:

      • 感谢您的建议。不幸的是,由于缺少formset,它会引发错误。如果我运行{% crispy form form.form.helper %},我会得到四个带有单独按钮和标题的单独表单。有没有办法防止这种情况发生?
      • 确保将form_tag 设置为False,如下所示:django-crispy-forms.readthedocs.org/en/d-0/…
      猜你喜欢
      • 2012-08-16
      • 2019-11-10
      • 2020-12-05
      • 1970-01-01
      • 2021-09-27
      • 1970-01-01
      • 2018-03-25
      • 1970-01-01
      • 2017-04-06
      相关资源
      最近更新 更多