如何重新排列django管理内联中的下拉列表?
我正试图给我们的django管理仪表板下一些命令。目前,我可以在如何重新排列django管理内联中的下拉列表?,django,django-admin,Django,Django Admin,我正试图给我们的django管理仪表板下一些命令。目前,我可以在MyModelAdmin中使用此代码按字段name排序下拉列表: def formfield_for_foreignkey(self, db_field, request, **kwargs): if db_field.name == "program": kwargs["queryset"] = models.ProgramModel.objects.all().order_by('name') r
MyModelAdmin
中使用此代码按字段name
排序下拉列表:
def formfield_for_foreignkey(self, db_field, request, **kwargs):
if db_field.name == "program":
kwargs["queryset"] = models.ProgramModel.objects.all().order_by('name')
return super(MyModelAdmin, self).formfield_for_foreignkey(db_field, request, **kwargs)
因此,当我转到MyModel
时,我看到下拉列表按字母顺序排列,如下图所示:
T) 问题是,如果我将该模型作为内联引入另一个模型中,它就不再是有序的:
如何在内联元素中也对下拉列表进行排序
我已经尝试过向我的MyModel
元类添加ordering
,它可以工作,但我希望这只影响管理页面,并与模型完全解耦
内联类就是这样:
class MyInline(admin.TabularInline):
extra = 1
model = models.Program.members.through
因此,我有一个模型
程序
,通过模型成员身份
(我在这里调用的是MyModel
)将m2m字段设置为Member
。您可以用内联类的相同方式实现formfield\u for\u foreignkey
:
from django.contrib import admin
class ProgramInline(admin.TabularInline):
"""Inline class"""
model = ProgramModel
def formfield_for_foreignkey(self, db_field, request, **kwargs):
if db_field.name == "program":
kwargs["queryset"] = models.ProgramModel.objects.all().order_by('name')
return super(ProgramInline, self).formfield_for_foreignkey(db_field, request, **kwargs)
class SomeAdmin(admin.ModelAdmin):
"""Register program inline for some model"""
inlines = [
ProgramInline,
]
您可以为foreignkey实现
formfield\u,方法与内联类相同:
from django.contrib import admin
class ProgramInline(admin.TabularInline):
"""Inline class"""
model = ProgramModel
def formfield_for_foreignkey(self, db_field, request, **kwargs):
if db_field.name == "program":
kwargs["queryset"] = models.ProgramModel.objects.all().order_by('name')
return super(ProgramInline, self).formfield_for_foreignkey(db_field, request, **kwargs)
class SomeAdmin(admin.ModelAdmin):
"""Register program inline for some model"""
inlines = [
ProgramInline,
]
你能添加你正在使用的Inline
类吗?@neverballanner done:)你能添加你正在使用的Inline
类吗?@neverballanner done:)在这种情况下,我在最后一行内联类中得到这个错误:异常值:super(type,obj):obj必须是type
@Nato522 oops的实例或子类型,抱歉,它应该是返回super(ProgramInline,self)
。或者在您的情况下,返回super(MyInline,self)
。工作得非常好!非常感谢。我肯定我以前试过了哈哈,谢谢!在这种情况下,我在最后一行内联类中得到了这个错误:异常值:super(type,obj):obj必须是@Nato522 oops类型的实例或子类型,很抱歉它应该是返回super(programminline,self)
。或者在您的情况下,返回super(MyInline,self)
。工作得非常好!非常感谢。我肯定我以前试过了哈哈,谢谢!