如何为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
相关产品推荐
相关产品推荐

