【问题标题】:list_display - boolean icons for methodslist_display - 方法的布尔图标
【发布时间】:2012-01-03 20:23:45
【问题描述】:

ModelAdmin 类定义list_display 数组时,如果给定BooleanFieldNullBooleanField,UI 将使用漂亮的图标而不是列中的True/False 文本。但是,如果给出了返回布尔值的方法,它只会打印出 True/False。

有没有办法让它使用漂亮的图标作为布尔方法?

【问题讨论】:

    标签: django django-admin


    【解决方案1】:

    这已记录在案,虽然有点难找 - 从here 往下走几个屏幕,你会发现:

    如果给定的字符串是模型的方法,ModelAdmin 或返回 True 或 False 的可调用对象,如果你给方法一个值为 boolean 的属性,Django 将显示一个漂亮的“on”或“off”图标987654324@.

    给出的例子是:

    def born_in_fifties(self):
        return self.birthday.strftime('%Y')[:3] == '195'
    born_in_fifties.boolean = True
    

    【讨论】:

    • 知道如何使用@property 装饰器吗?:“AttributeError: 'property' object has no attribute 'boolean'”
    • 这很有帮助
    • 漂亮!这就是让我喜欢 Python+Django 的原因。
    • 不要忘记,这只有在方法不是静态的情况下才有效!
    【解决方案2】:

    感谢@daniel-roseman (rtfm)
    从 Django 3.2 there is a decorator @admin.display(boolean=True):

    如果给出的字符串(list_display)是模型的方法, ModelAdmin 或返回 TrueFalseNone 的可调用对象,Django 如果您将 带有 display() 装饰器的方法传递 boolean 参数 值设置为True

    class Person(models.Model):
        birthday = models.DateField()
    
        @admin.display(boolean=True)
        def born_in_fifties(self):
            return 1950 <= self.birthday.year < 1960
    

    【讨论】:

      【解决方案3】:

      我让这个为我工作 (Django 3.1.10)

      class MyAdmin(MyModel):
          list_display = ("field_as_boolean", )
          
          def field_as_boolean(self, obj):
              return True if obj.field else False
          field_as_boolean.boolean = True
          field_as_boolean.short_description = "field_name"
      

      【讨论】:

        猜你喜欢
        • 2012-11-08
        • 2013-08-09
        • 1970-01-01
        • 2015-11-10
        • 1970-01-01
        • 2016-01-26
        • 1970-01-01
        • 1970-01-01
        • 2013-03-05
        相关资源
        最近更新 更多