Django Admin-动态选择list_display字段(用户定义)

时间:2018-07-11 04:21:00

标签: python django django-admin

我的某些模型具有很多字段,用户可能不需要在任何给定时间点都看到它们。我正在尝试添加功能,以允许用户选择从前端显示哪些字段,而不必更改admin.py文件中的list_display定义。我也不想只为它们倾倒所有字段。

我希望有人可以将我指向github上的某个地方,或者给我一些有关如何执行此操作的建议。

先谢谢了。

我指的不是基于角色的视图。我在说的是用户从前端按需定义字段。因此,如果我具有字段A,B,C和D。我只能说从管理用户界面显示A和D。然后明天我可能要添加C字段。我在管理员之外使用JavaScript来完成此操作,但是如果不需要,我不想陷入覆盖管理员模板的麻烦。

1 个答案:

答案 0 :(得分:0)

以下是指向通用解决方案的指针,该解决方案可为您提供一系列控制。这并没有什么用处,但可以通过查看正在显示的对象列表,向您展示如何在运行时动态更改有关列的几乎所有内容。将其与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