Django管理更改列表视图禁用某些字段的排序

2024-05-13 20:28:31 发布

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

是否有方法可以禁用django管理更改列表中某些字段的排序功能,因此对于这些字段,用户无法单击列标题来对列表进行排序。在

我试过以下方法,但没用。在

https://djangosnippets.org/snippets/2580/

我也厌倦了重写ModelAdmin中的changelist\u视图,但也没有发生任何事情。在

def changelist_view(self, request, extra_context=None):
    self.ordering_fields = ['id']
    return super(MyModelAdmin, self).changelist_view(request, extra_context)

在上述情况下,我只允许用户按ID对列表进行排序

有人有建议吗?谢谢。在


Tags: django方法用户httpsorgselfview标题
1条回答
网友
1楼 · 发布于 2024-05-13 20:28:31

对于django1.7(或者我上次使用的版本)不支持这样的东西。一个可能的麻烦工作是定义一个模型类方法并使用该方法代替模型字段。在

class TestClass(Model):
    some_field = (.....)
    other_field = (........)

    def show_other_field(self):
        return self.other_field

class TestClassAdmin(ModelAdmin):
     list_display = ("some_field", "show_other_field")

由于show_other_field是一个模型类方法,django不知道如何对该方法的返回结果进行排序(或处理)。在

但正如我所说,这是一种肮脏的黑客行为,根据用例可能需要比显示模型字段更多的处理(可能还需要更多的数据库调用)。在

额外:如果您想使一个模型方法可排序,则必须传递admin_order_field值,如下所示:

^{pr2}$

这将使您的模型方法在adminlist_display中可排序。但是必须传递一个在数据库api的order_by方法中可用的字段或关系。在

TestClass.objects.filter(....).order_by(<admin_order_field>)

相关问题 更多 >