python - 是否可以在 Django 管理面板中过滤外键的选择?

标签 python django django-admin

这是我的情况:
我有三个模型:年级、类(class)和计划。 Grade 有一个指向 Course 的外键,而 Course 有一个指向 Program 的外键。

这是我的问题:
当我需要在我的管理面板中添加一些成绩时,我有一个充满类(class)的列表框。第一个问题:相同的类(class)名称可以在两个不同的程序中找到,并且很难在列表框中识别。现在它显示为 Program.name - Course.name

我想知道是否有任何解决方案可以帮助我在创建或修改成绩时按程序过滤我的类(class)列表。 (我说的是成绩创建界面,不是那个界面之前的列表)。

编辑:
感谢您的回答。我想我必须编写自己的小部件代码,使我的过滤器客户端具有 AJAX。

最佳答案

您可以使用 AJAX 编写这样的过滤器(使用 jQuery 或类似的框架是最简单的方法)。您将创建一个包含两个列表的自定义表单小部件。第一个将在页面加载时由服务器填充所有可用程序。然后,您的 javascript 将等待做出选择,然后向服务器(即 AJAX 部分)询问该程序中的类(class)列表,并相应地更新第二个列表。

但是,对于您的情况,我认为这太过分了;这样做会容易得多 jammon's answer says并将 Grade 模型的管理员放在相应的类(class)管理员中(这称为内联模型管理员;请参阅主题的 the Django documentation)。不幸的是,他们的回答中给出的示例代码不起作用,因此我创建了以下适用于我的示例。

配置 Django 管理的基本方法是在 admin.py 中向管理站点简单地注册您的模型。您可能正在按照以下几行做一些事情:

from django.contrib import admin
from myapp.models import Program, Course, Grade

admin.site.register(Program)
admin.site.register(Course)
admin.site.register(Grade)

相反,我们想在类(class)本身的管理部分编辑类(class)的成绩。首先,我们需要为年级定义一个内联管理类:

class GradeInline(admin.TabularInline):
    model = Grade
    extra = 1

请注意,您可以选择从 admin.TabularInlineadmin.StackedInline 继承。通常,我更喜欢 TabularInline 的外观,但它可能取决于您的模型,因此请尝试两者。 extra 选项定义将向用户显示多少个空白表单。

接下来我们需要告诉类(class)管理页面添加内嵌表单:

class CourseAdmin(admin.ModelAdmin):
    model = Course
    inlines = (GradeInline,)

最后,我们不想再显示独立的成绩管理员,所以我们不需要在管理站点注册它。相反,我们必须指定我们的自定义管理类用于类(class)模型。这意味着应用程序的最终 admin.py 文件如下:

from django.contrib import admin
from myapp.models import Program, Course, Grade

class GradeInline(admin.TabularInline):
    model = Grade
    extra = 1

class CourseAdmin(admin.ModelAdmin):
    model = Course
    inlines = (GradeInline,)

admin.site.register(Program)
admin.site.register(Course, CourseAdmin)

关于python - 是否可以在 Django 管理面板中过滤外键的选择?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6103132/

相关文章:

java - 我可以在 python 中访问 C++ 或 Java 函数吗

django - 在表设计问题中显示多个相关的 Django 模型

python - 在 Django 应用程序中查找主机和端口

django - 无法连接到 amqp ://guest:**@127. 0.0.1:5672//: [Errno 111] 连接被拒绝

django - Django 管理面板中特定字段的权限

python - 从覆盖报告中排除抽象属性

python - 通过Python处理loess函数中的rpy2/R问题?

python - 对于宽字符,curses 的 window.insnstr 在 Python 3 中是否损坏?

python - 在 Django Admin 中实现工作流程 - Django

javascript - Django-tinymce 不工作;获取一个普通的文本区域