Shu*_*uvo 4 django admin sql-order-by django-queryset extra
因此,查询集中的额外字段可用于向选择查询添加其他列,而后者又可以设置为默认排序.到目前为止,我已经能够实现这一点:创建了一个额外的字段,然后将其设置为默认排序.
qs = qs.extra(select={'natname':"concat('0', nat, name)"}, order_by=['natname'])
Run Code Online (Sandbox Code Playgroud)
现在,在我的管理界面中,我有其他字段{name, nat, location, space, ....},表格中的结果按natname页面加载时排序...完美.
但是现在我想在name现场进行排序,但不是按顺序排序name,我希望它按顺序排序natname.这可能吗?
所以即使natname是一个额外的字段,我想以某种方式绑定列name与natname订购时.
现在,如果我这样做qs.query.__str__(),我会得到sql查询order by natname.当我点击列时name,按更改顺序排序name,但仅针对此特殊情况,我希望它按顺序排序natname.这可能吗?
我已经了解了Django如何为这些自动化管理页面生成标题和视图,<django-installation-path>/contrib/admin但它只引用了此模型中list_display定义的集合ModelAdmin.如果我在那里进行任何更改,则显示的列将在admin-view中更改.
听起来有点令人困惑.如果您需要特殊细节,请随时询问.
谢谢.
是! 这是可能的(至少在Django 1.2.3中):
在您的admin.ModelAdmin子类中:
from django.contrib import admin
from .models import ClassA
class ModelAdminA(admin.ModelAdmin):
list_display = ('natname',)
def natname(self, obj):
return obj.name
natname.admin_order_field = 'natname'
natname.short_description = 'name'
def queryset(self, request):
qs = super(ModelAdminA, self).queryset(request)
qs = qs.extra(select={ 'natname': "concat('0', nat, name)" })
return qs
admin.site.register(ClassA, ModelAdminA)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2032 次 |
| 最近记录: |