【问题标题】:list_display with a function, how to pass arguments?list_display 带有函数,如何传递参数?
【发布时间】:2012-12-11 13:47:16
【问题描述】:

Django admin docs 表示可以将可调用对象指定为可在list_display 中使用的值。如果我需要通过函数参数向函数传递一些额外的上下文,那么最好的方法是什么?

在伪代码中,我想做的是:

应用房地产:

models.py:

class A(models.Model):
    raw = models.TextField()

admin.py:

from utils import processing

list_display = [processing('realestate app result', True)]

应用派对:

models.py:

class Person(models.Model):
    raw = models.TextField()

admin.py:

from utils import processing

list_display = [processing('party app result', False)]

utils.py:

def processing(obj, short_description, allow_tags=False):
    def process(obj):
        # do something
        pass
    process.short_description = short_description
    process.allow_tags = allow_tags

    return process(obj)

【问题讨论】:

  • 你不能以这种方式传递参数,单元格应该知道如何根据它所代表的模型呈现自己。你需要通过什么论据?描述你的情况,我们会看到你应该解决问题
  • @YardenST 编辑了问题,谢谢。

标签: python django django-admin argument-passing


【解决方案1】:

您不应在函数本身内指定short_descriptionallow_tags

这样定义处理:

utils.py:

def processing(obj):
      #do something
      pass

在每个 ModelAdmin 类上,执行:

class RealestateAdmin(...):
   list_display = [processing,]

   def processing(obj):
       return utils.processing(obj)
   processing.short_description = 'realestate app result'
   processing.allow_tags = True


class PartyAdmin(...):
   list_display = [processing,]

   def processing(obj):
       return utils.processing(obj)
   processing.short_description = 'party app result'
   processing.allow_tags = False

所以你有一个包含逻辑的地方(utils.py)。 每个类都定义了要在表格中显示的属性。

【讨论】:

  • 此时不需要定义process函数。
猜你喜欢
  • 2013-04-09
  • 2014-09-03
  • 2021-10-08
  • 2010-11-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多