Django-如何在模型表单的当前字段上添加占位符?

时间:2018-08-28 15:10:12

标签: django django-forms placeholder modelform

我希望能够像这样改变占位符:

<input placeholder=" {{ input.placeholder }}">

其中输入是model和“占位符” field。由于我将使用表单集,因此占位符字段会有所不同,并且每个占位符都会有所不同。

这是我的modelForm

class Value(forms.ModelForm):

class Meta:
    model = ValueModel
    fields = ['value_text']
    widgets = {
        'value_text': forms.TextInput(attrs={'class': 'form-control'})

和我的modelformset

values_formset = modelformset_factory(model=ValueModel, extra=0, form=Value)

我尝试过

class Value(forms.ModelForm):
    def __init__(self, *args, **kwargs):
        super(Value, self).__init__(*args, **kwargs)
        self.fields['value_text'].widget.attrs['placeholder'] = self.fields['placeholder']

class Meta:
    model = ValueModel
    fields = ['value_text', 'placeholder']
    widgets = {
        'value_text': forms.TextInput(attrs={'class': 'form-control'})

其他尝试修改self.fields的尝试均未成功。

编辑:我的views.py的相关部分:

def page_view(request, values_id):
    values_form =  values_formset(queryset=ValueModel.objects.filter(
        values_id=values_id))

    context = {'value': values_form}
    return render(request, 'view.html', context)

我的模板视图:

{{ value.management_form }}
{% for form in value %}
{{ form.id }}
{{ form.value_text }}
{% endfor %}

1 个答案:

答案 0 :(得分:1)

self.fields['placeholder']引用表单字段对象,而不是值;您不能将其用作占位符。但是似乎您想要的是使用模型实例的值。

def __init__(self, *args, **kwargs):
    super(Value, self).__init__(*args, **kwargs)
    self.fields['value_text'].widget.attrs['placeholder'] = self.instance.placeholder