你能在Django管理应用程序中更改字段标签吗?

74

正如标题所示,我想能够更改管理应用程序中单个字段的标签。我知道Form.field属性,但是如何让我的Model或ModelAdmin传递这些信息呢?

8个回答

109

字段的verbose name是字段构建时的(可选)第一个参数。


5
想知道:是否可以仅通过管理员来实现,例如注销和重新注册模型?答案是肯定的,可以通过自定义表单(在处理更复杂的字段时存在缺点)或通过管理员的自定义函数属性来实现。如果可能的话,希望找到更简洁的解决方案... - benzkji

43

如果您的字段是属性(方法),那么应该使用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"

1
你所描述的是一个可以利用字段的函数,而不是一个字段本身。 - Timo

34

正如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,在管理员表单中显示其名称。


12

如果您想仅更改特定管理模型上的字段标签,而不更改模型的字段:

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

此答案已在低质量队列中进行了审核。以下是一些关于如何撰写好的回答?的指南。仅包含代码的答案不被认为是好的答案,并且很可能会因为对学习者社区的帮助较少而被投票降低或删除。请[编辑]您的答案,以包括解释代码如何解决问题、何时使用、其限制以及如果可能的话相关文档的链接。 - ljmc
2
可能不是一个“被认为是好答案”的答案,但它能解决问题! - JoeManFoo

10
from django.db import models

class MyClassName(models.Model):    
    field_name = models.IntegerField(verbose_name='Field Caption')

2
要求更改字段名称,而不是类名。因此,-1。 - Timo

5

在Javier的回答基础上,如果您需要在前端表单中使用一个标签,在管理员界面中使用另一个标签,最好在模型中设置内部(管理员)标签,并在表单上覆盖它。管理员当然会自动使用模型字段中的标签。


3

就变更列表视图而言,这可以通过一个简单的字段函数来完成。

class MyModelAdmin(admin.ModelAdmin): 

    list_display = (
        '_name',
        ...,
    )

    @admin.display(description='Customized field name here')
    def _name(self, obj):
        return obj.name

2
你可以使用verbose_name来在Django Admin中更改字段标签,如下所示。
# "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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接