【问题标题】:Make django admin to display no more than 100 characters in list results让 django admin 在列表结果中显示不超过 100 个字符
【发布时间】:2013-02-23 12:14:42
【问题描述】:

我正在为我的站点使用 Django admin,并且我想自定义字段在我的一个模型的 list_display 页面上的显示方式。

我的一个模型有一个TextField,可以是 300 个字符

当模型在 Django admin 中列出时,我想将 Admin 列表显示中显示的文本长度限制为 100 个字符。

有没有办法在 Django Admin 类中做到这一点?

admin.py:

class ApplicationAdmin(admin.ModelAdmin):
    model = Application
    list_display = [ "title1", "title2"]

models.py:

class Application(models.Model):
    title1 = models.TextField(max_length=300)
    title2 = models.TextField(max_length=300)

【问题讨论】:

    标签: python django


    【解决方案1】:

    在您的 Admin.py 文件中:

    class ApplicationAdmin(admin.ModelAdmin):
        list_display = ['titl1','title2'] # titl1 is behalf of title1
        
        def titl1(self, obj):
            return obj.title1[:100]
    

    【讨论】:

      【解决方案2】:

      您可以在 ModelAdmin 类中显示返回字段值的截断版本的属性。利用内置的模板过滤器可以轻松完成。

      from django.template.defaultfilters import truncatechars  # or truncatewords
      
      class Foo(models.Model):
          description = models.TextField()
      
          @property
          def short_description(self):
              return truncatechars(self.description, 100)
      
      class FooAdmin(admin.ModelAdmin):
          list_display = ['short_description']
      

      【讨论】:

      • 有什么方法可以在列表显示中传递像 100 这样的参数
      • 你想完成什么?
      • @Brandon ,实际上我希望我在父类中只定义一次截断函数,然后我可以在 listdisplay 中传递参数和单词,这样我就不需要在每个模型
      • 您无法使用 list_display 属性执行此操作。您必须将过滤器应用于每个字段。
      • 我想提一下,如果有人不想在他的模型类中添加一个与视图相关的方法,他也可以在管理类中添加一个方法。这个可调用对象将作为参数传递给模型对象。我认为这种方式比上述解决方案更好。想象一下,您需要在不同的管理员中将字符串截断为不同的大小,然后在模型类中以 short_xxx、veryshort_xxx 等方法结束。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-05-12
      • 2023-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-27
      • 1970-01-01
      相关资源
      最近更新 更多