我的某些模型具有很多字段,用户可能不需要在任何给定时间点都看到它们。我正在尝试添加功能,以允许用户选择从前端显示哪些字段,而不必更改admin.py文件中的list_display定义。我也不想只为它们倾倒所有字段。
我希望有人可以将我指向github上的某个地方,或者给我一些有关如何执行此操作的建议。
先谢谢了。
我指的不是基于角色的视图。我在说的是用户从前端按需定义字段。因此,如果我具有字段A,B,C和D。我只能说从管理用户界面显示A和D。然后明天我可能要添加C字段。我在管理员之外使用JavaScript来完成此操作,但是如果不需要,我不想陷入覆盖管理员模板的麻烦。
答案 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