Django Form自定义Widget未在浏览器正常渲染问题求助
问题原因
你这里有两处代码错误导致自定义Widget未生效:
- 第一处:ModelForm的Meta类中指定自定义组件的属性名拼写错误,Django规定该属性为复数形式
widgets,你代码中写的是单数widget,所以配置完全未被识别,字段默认使用模型对应的原生输入框组件。 - 第二处:视图中GET请求分支没有正确实例化表单类,你直接将类
CreateRealEstateForm赋值给了模板变量,没有加括号实例化,导致表单配置无法正常加载。
修复方案
1. 修改表单代码
from django import forms from .models import RealEstateTax class CreateRealEstateForm(forms.ModelForm): class Meta: model = RealEstateTax fields = ['invoice_number',] # 修复属性名,改为复数widgets widgets = { 'invoice_number': forms.Textarea(attrs={'class': 'form-control', 'placeholder': 'Text goes here'}), }
2. 修改视图代码
from realestate.models import RealEstate from django.shortcuts import render, redirect from django.http import HttpResponse from .models import * from django.db.models import Sum from realestate.models import RealEstate from .forms import CreateRealEstateForm def create_real_tax(request): # 修复:实例化表单类,添加括号 form = CreateRealEstateForm() if request.method == 'POST': form = CreateRealEstateForm(request.POST) if form.is_valid(): form.save() print(form.base_fields) context = {'form':form} return render(request, 'billing/create_real_tax.html', context)
修改完成后刷新页面即可看到invoice_number字段渲染为Textarea组件,自动携带form-control类,文本显示为红色。
内容的提问来源于stack exchange,提问作者Marcus
相关产品推荐
相关产品推荐

