Django Admin动态选择列表显示字段(用户定义)

2024-05-12 19:19:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我的一些模型有很多字段,用户可能不需要在任何给定的时间点看到所有字段。我正在尝试添加功能,以允许用户选择从前端显示的字段,而不必更改py管理员文件。我也不想把所有的田地都扔给他们。在

我希望有人能在github上给我指点什么,或者给我一些关于如何做这件事的建议。在

提前谢谢。在

我不是指基于角色的观点。我所说的是用户从前端定义按需字段。所以如果我有字段A,B,C和D,我可以说只显示管理用户界面中的A和D。明天我可能要加上C字段。我在管理员之外使用JavaScript来完成这项工作,但是如果不需要的话,我不想陷入覆盖管理模板的麻烦中。在


Tags: 文件用户py模型功能github角色定义
1条回答
网友
1楼 · 发布于 2024-05-12 19:19:59

这里有一个指向一个通用解决方案的指针,它给了你一堆控制权。这并没有做任何非常有用的事情,但是向您展示了如何通过查看正在显示的对象列表在运行时动态地更改有关列的几乎所有内容。把这个和request.session结合起来,我想你可以做你想做的。。。在运行时更改要显示的列数、列标题和内容。在

class DynamicColumn():

    def __init__(self, qs:QuerySet):
        self.qs = qs
        # Analyze the queryset to decide what to show
        self.__name__ = "Dynamic column title"

    def __call__(self, widget:Widget) -> str:
        # Take the model instance and return something to display
        return f"This QS has {len(self.qs)} items"


class WidgetAdmin(admin.ModelAdmin):
    list_display = (
        'name',
        'price',
        'stock',
    )

    def get_list_display(self, request):
        qs = self.get_queryset(request)
        dc = DynamicColumn(qs)
        out = list(self.list_display)
        out.append(dc)  # Add multiple different instances if you want
        return out

相关问题 更多 >