2

Django 管理文档说可以将可调用对象指定为可以在list_display. 如果我需要通过函数参数向函数传递一些额外的上下文,那么最好的方法是什么?

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

应用房地产:

模型.py:

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

管理员.py:

from utils import processing

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

应用派对:

模型.py:

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

管理员.py:

from utils import processing

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

实用程序.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)
4

1 回答 1

3

您不应该在函数本身内指定short_descriptionand 。allow_tags

像这样定义处理:

实用程序.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)。每个类都定义了要在表格中显示的属性。

于 2012-12-25T19:54:52.180 回答