【问题标题】:Verbose name for @property@property 的详细名称
【发布时间】:2014-03-21 16:09:17
【问题描述】:

我有一个@property,名为name

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)

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

【问题讨论】:

  • 感谢@karthikr,但这似乎只能在管理员中使用admin.ModelAdmin。我正在使用models.Model 寻找类似的行为。
  • 我在搞乱django-tables2 并想在列中显示@property。显然修复是在定义列时使用verbose_name。可能还有其他需要这样做的示例。
  • 重新化石的帖子。你应该使用 my_property.fget.short_description = u'Property X'。谢谢。

标签: django django-models


【解决方案1】:

不能为名为@9​​87654323@ 的@property 设置verbose_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'

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

这使用@property 创建的fget 对象并在其中设置short_description 属性。 Django 查找该属性并在可用时使用它。

【讨论】:

    【解决方案2】:

    在文档中建议使用以下代码对属性进行简短描述:

    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',)
    

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

    columnName = tables.Column(verbose_name='column name')
    

    Django-tables2: Change text displayed in column title

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

    【讨论】:

      猜你喜欢
      • 2011-02-22
      • 1970-01-01
      • 2013-01-07
      • 2016-07-18
      • 2018-09-13
      • 2012-12-18
      • 2021-01-20
      • 2021-12-29
      相关资源
      最近更新 更多