你可以在Django Admin应用程序中更改字段标签吗?

Jos*_*ton 45 python django django-forms django-admin

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

Jav*_*ier 72

字段的详细名称是字段构造中的(可选)第一个参数.

  • 想知道:例如,当取消注册和重新注册模型时,是否只能通过管理员来实现?答案是肯定的,可以使用自定义表单(更复杂字段的缺点)或通过管理员的自定义功能属性。寻找更简单的解决方案,如果可能的话...... (5认同)

Sep*_*man 27

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


Nag*_*nan 17

正如Javier建议您可以在model.py中的字段中使用详细名称.示例如下,

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')
Run Code Online (Sandbox Code Playgroud)

这里dob,doj和proj文件将根据这些字段提到的verbose_name以admin形式显示其名称.


Evg*_*del 13

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

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
Run Code Online (Sandbox Code Playgroud)

  • 可能是“不被认为是好的答案”,但它确实有效! (2认同)

Maj*_*ndi 10

元选项

使用内部类Meta提供模型元数据,如下所示:

from django.db import models

class MyClassName(models.Model):    
    field_name = models.IntegerField(verbose_name='Field Caption')
Run Code Online (Sandbox Code Playgroud)

人类可读的单数和复数名称(verbose_name和verbose_name_plural).不需要,并且将类Meta添加到模型是完全可选的.

  • 要求更改字段名称,而不是类名称。因此-1 (2认同)

yty*_*yng 6

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

class MyModelAdmin(admin.ModelAdmin): 

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

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


muh*_*huk 5

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