python Django表单-传递额外参数(动态表单创建)

zysjyyx4  于 2023-02-18  发布在  Python
关注(0)|答案(2)|浏览(186)

我正在尝试在自定义模板中传递额外参数(表单未提供)
在本例中,我传递了一个图标字体。

class AddForm(forms.Form):
    def __init__(self, *args, **kwargs):
      *passing some args*
       self.fields[field_key] = forms.CharField(**field_args)
       self.fields[field_key].icon = 'fa-font'
template.html
{% for field in form%}
    {{field.icon}}
    {{field}}
{% endfor %}

当我将窗体呈现给视图时,没有打印出任何图标。
我如何传递额外的参数到表单域?

vlju58qv

vlju58qv1#

是的,当然,当你在表单中使用构造函数init时,你只能改变你的字段的值,比如:

just_value = models.ModelChoiceField(
        queryset=YourModel.objects.none())

然后您只能在init中传递.queryest

self.fields['just_value'].queryset = YourModel.objects.filter(something_there)

我不知道图标,但你可以通过添加小部件属性来设置你的字段的样式:

just_value = models.ModelChoiceField(
        queryset=YourModel.objects.none(),
        widget=attrs{'class':'form-class')

我想建议你打包'django-widget-tweaks'并用{% render_field %}渲染你的每个字段

zdwk9cvp

zdwk9cvp2#

在Django中,要向表单字段传递额外的参数,可以为该字段创建一个自定义小部件,然后将额外的参数添加到小部件中

from django.forms.widgets import TextInput

class IconTextInput(TextInput):
    def __init__(self, icon, *args, **kwargs):
        self.icon = icon
        super().__init__(*args, **kwargs)

然后修改表单的__init__方法以使用自定义小部件

class AddForm(forms.Form):
    def __init__(self, *args, **kwargs):
        # passing some args
        field_args['widget'] = IconTextInput(icon='fa-font')
        self.fields[field_key] = forms.CharField(**field_args)

最后,修改模板以使用icon参数:

{% for field in form %}
    <i class="fa {{ field.field.widget.icon }}"></i>
    {{ field }}
{% endfor %}

相关问题