You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 04:45:03