正如标题所示,我想能够更改管理应用程序中单个字段的标签。我知道Form.field属性,但是如何让我的Model或ModelAdmin传递这些信息呢?
正如标题所示,我想能够更改管理应用程序中单个字段的标签。我知道Form.field属性,但是如何让我的Model或ModelAdmin传递这些信息呢?
字段的verbose name是字段构建时的(可选)第一个参数。
如果您的字段是属性(方法),那么应该使用short_description:
class Person(models.Model):
...
def address_report(self, instance):
...
# short_description functions like a model field's verbose_name
address_report.short_description = "Address"
正如Javier建议的那样,您可以在model.py中的字段中使用verbose name。以下是示例:
class Employee(models.Model):
name = models.CharField(max_length = 100)
dob = models.DateField('Date Of Birth')
doj = models.DateField(verbose_name='Date Of Joining')
mobile=models.IntegerField(max_length = 12)
email = models.EmailField(max_length=50)
bill = models.BooleanField(db_index=True,default=False)
proj = models.ForeignKey(Project, verbose_name='Project')
在这里,dob、doj和proj文件将根据这些字段所提到的verbose_name,在管理员表单中显示其名称。
如果您想仅更改特定管理模型上的字段标签,而不更改模型的字段:
class MyModelAdmin(admin.ModelAdmin):
def get_form(self, request, obj=None, **kwargs):
form = super().get_form(request, obj, **kwargs)
form.base_fields["name"].label = "New label"
return form
from django.db import models
class MyClassName(models.Model):
field_name = models.IntegerField(verbose_name='Field Caption')
在Javier的回答基础上,如果您需要在前端表单中使用一个标签,在管理员界面中使用另一个标签,最好在模型中设置内部(管理员)标签,并在表单上覆盖它。管理员当然会自动使用模型字段中的标签。
就变更列表视图而言,这可以通过一个简单的字段函数来完成。
class MyModelAdmin(admin.ModelAdmin):
list_display = (
'_name',
...,
)
@admin.display(description='Customized field name here')
def _name(self, obj):
return obj.name
# "models.py"
class MyModel(models.Model): # Here
name = models.CharField(max_length=255, verbose_name="My name")
verbose_name
,如下所示:# "models.py"
class MyModel(models.Model):
name = models.CharField("My name", max_length=255)
# Here