list_display有一个函数,如何传递参数?

时间:2012-12-25 18:49:29

标签: python django django-admin argument-passing

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

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

App realestate:

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)

1 个答案:

答案 0 :(得分:3)

您不应在函数本身内指定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)包含逻辑。 每个类都定义了要在表中显示的属性。