如何重新排列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

我正试图给我们的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')
    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)
。工作得非常好!非常感谢。我肯定我以前试过了哈哈,谢谢!