@property的详细名称

Sae*_*aeX 8 django django-models

我有一个@propertyname

class Person(models.Model):
    first_name = models.CharField("Given name", max_length=255)
    last_name = models.CharField("Family name ", max_length=255)

    @property
    def name(self):
        return "%s %s" % (self.first_name, self.last_name)
Run Code Online (Sandbox Code Playgroud)

是否可以轻松指定verbose_name此属性?

L S*_*L S 5

Averbose_name不能为@property被调用的设置name,但short_description可以代替使用:

class Person(models.Model):
    first_name = models.CharField('Given name', max_length=255)
    last_name = models.CharField('Family name ', max_length=255)

    @property
    def name(self):
        return '%s %s' % (self.first_name, self.last_name)

    name.fget.short_description = 'First and last name'
Run Code Online (Sandbox Code Playgroud)

这可能不适用于所有 Django 管理类,但它适用于基本类。

这将使用由fget创建的对象@propertyshort_description在其中设置一个属性。Django 查找该属性并在可用时使用它。


sey*_*far 3

在文档中,建议使用以下代码来给出属性简短描述:

class Person(models.Model):
    first_name = models.CharField(max_length=50)
    last_name = models.CharField(max_length=50)

    def my_property(self):
        return self.first_name + ' ' + self.last_name
    my_property.short_description = "Full name of the person"

    full_name = property(my_property)

class PersonAdmin(admin.ModelAdmin):
    list_display = ('full_name',)
Run Code Online (Sandbox Code Playgroud)

但是,这种方法在使用 Django-tables2 时不起作用,因此需要以下代码才能更改列名称:

columnName = tables.Column(verbose_name='column name')
Run Code Online (Sandbox Code Playgroud)

Django-tables2:更改列标题中显示的文本

所以最后我认为如果您遇到这样的问题,您应该使用自定义表单并覆盖字段 verbose_name 。