You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Django Admin中设置多对多字段按最新优先排序显示

解决Django Admin里TestSeries关联内容的排序问题

先修正你model代码里的两个小问题:

  1. id = models.AutoField 得加括号,改成 id = models.AutoField(primary_key=True)——其实Django默认会自动生成主键id,这个字段完全可以省略
  2. 多对多关联的MyQuestion写错了,应该是Question,你的模型类叫Question

修正后的基础代码:

class Question(models.Model):
    question = models.CharField(max_length=100)
    answer = models.CharField(max_length=100)

class TestSeries(models.Model):
    quiz_name = models.CharField(max_length=100)
    all_question = models.ManyToManyField(Question)

接下来给你两种改排序的方法,按需选择:

方法一:全局设置Question的默认排序

直接在Question模型里加Meta类,指定按id倒序,这样所有地方查询Question都是最新创建的在前:

class Question(models.Model):
    question = models.CharField(max_length=100)
    answer = models.CharField(max_length=100)

    class Meta:
        ordering = ['-id']  # 负号表示倒序,id越大(创建时间越晚)排得越靠前

方法二:仅在TestSeries的Admin页面修改排序

如果不想影响其他场景下的Question排序,只改TestSeries Admin里的关联内容顺序,就自定义Admin类:

from django.contrib import admin
from .models import TestSeries, Question

class TestSeriesAdmin(admin.ModelAdmin):
    # 可选配置:用水平选择器,已选内容会跟随查询集的排序规则显示
    filter_horizontal = ('all_question',)

    def formfield_for_manytomany(self, db_field, request, **kwargs):
        if db_field.name == 'all_question':
            # 指定关联的Question按id倒序查询
            kwargs['queryset'] = Question.objects.order_by('-id')
        return super().formfield_for_manytomany(db_field, request, **kwargs)

admin.site.register(TestSeries, TestSeriesAdmin)
admin.site.register(Question)

设置完成后,打开TestSeries的Admin页面,已添加的关联Question就会按最新优先的顺序显示了。

内容的提问来源于stack exchange,提问作者Raj Subh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 14:00:48