python - list_display带有函数,如何传递参数?

标签 python django django-admin argument-passing

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

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

应用房地产:

模型.py:

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

admin.py:

from utils import processing

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

应用方:

模型.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)

最佳答案

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

关于python - list_display带有函数,如何传递参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14033182/

相关文章:

python - 如何 "Permanently"删除Mlflow中的实验?

django - 运行 django 测试时如何修复 "TypeError: argument of type ' ConnectionHandler' is not iterable”?

python - Django 导入导出选择字段

python - 使Python错误消息更加详细/详细/特定-是否可能?

python - 与其按键读取字典,不如按值读取 (mydict[key] = value >>> mydict[value] = key)

python - 类型错误 : cannot concatenate 'str' and 'float' objects on line 10

jquery - 通过 jQuery 使字段只读

django - 如何在 Django 用户名中包含正斜杠

javascript - 有没有办法在 Django Admin 弹出窗口(添加、更新、删除)完成时调用 Javascript 函数?

Django 管理自定义模板标签