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

如何为Django表单字段设置自定义标题?将Fixed by改为Fixed by/Assigned to

Django表单字段自定义标题不生效的解决方法

问题说明

需要将Django表单中的“Fixed by”字段标题修改为“Fixed by/Assigned to”,已在models.py和forms.py中做了相关修改,但表单显示仍未更新。

现有代码

forms.py

from django.forms import ModelForm
from django import forms
from .models import bug
from phonenumber_field.modelfields import PhoneNumberField


status_choice = [("Pending","Pending"),("Fixed","Fixed"),("Not Fixed","Not Fixed")]
class UploadForm(ModelForm):
    name = forms.CharField(max_length=200)
    info = forms.TextInput()
    status = forms.ChoiceField(choices = status_choice, widget= forms.RadioSelect())
    fixed_by = forms.CharField(max_length=30)
    phn_number = PhoneNumberField()
    screeenshot = forms.ImageField()

    class Meta:
        model = bug
        fields = ['name', 'info', 'status', 'fixed_by', 'phn_number', 'screeenshot']
        labels = {'fixed_by' : 'Fixed by/Assigned to'}

models.py

from django.db import models
from phonenumber_field.modelfields import PhoneNumberField, formfields
from django.utils import timezone
from django.contrib.auth.models import User

status_choice = [("Pending","Pending"),("Fixed","Fixed"),("Not Fixed","Not Fixed")]
class bug(models.Model):
    name = models.CharField(max_length=200, blank= False, null= False)
    info = models.TextField()
    status = models.CharField(max_length=25, choices=status_choice, default="Pending")
    fixed_by = models.CharField(verbose_name="Fixed by/Assigned to", max_length=30)
    phn_number = PhoneNumberField()
    user = models.ForeignKey(User, on_delete= models.CASCADE)
    created_at = models.DateTimeField(auto_now_add= True)
    updated_at = models.DateTimeField(auto_now= True)
    screeenshot = models.ImageField(upload_to='pics')

问题原因

在forms.py中,你显式定义了fixed_by字段(fixed_by = forms.CharField(max_length=30)),此时Django会优先使用这个显式配置,忽略Meta类中的labels设置,也不会读取模型字段的verbose_name,导致自定义标题无法生效。

解决方法

有两种可行的修改方式,任选其一即可:

方法一:在显式字段中直接指定label

修改forms.py中的fixed_by字段定义,添加label参数:

fixed_by = forms.CharField(max_length=30, label='Fixed by/Assigned to')

方法二:移除表单中的显式字段定义

删除forms.py里的fixed_by = forms.CharField(max_length=30)这一行,让ModelForm自动从模型生成该字段。此时会优先使用Meta类中的labels设置,如果没有设置则会读取模型字段的verbose_name,两种方式都能生效。

修改后的forms.py片段:

class UploadForm(ModelForm):
    name = forms.CharField(max_length=200)
    info = forms.TextInput()
    status = forms.ChoiceField(choices = status_choice, widget= forms.RadioSelect())
    # 移除fixed_by的显式定义
    phn_number = PhoneNumberField()
    screeenshot = forms.ImageField()

    class Meta:
        model = bug
        fields = ['name', 'info', 'status', 'fixed_by', 'phn_number', 'screeenshot']
        labels = {'fixed_by' : 'Fixed by/Assigned to'}

验证效果

修改后重启服务刷新页面,表单中的“Fixed by”字段标题会更新为“Fixed by/Assigned to”。

内容的提问来源于stack exchange,提问作者Jin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 01:20:42