在 Django Admin 中显示对象相关对象参考

Display Objects Related Objects Reference In Django Admin

我有两个 类 具有一对多关系:

class Teacher(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)

class Student(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    teacher = models.ForeignKey(Teacher, on_delete=models.CASCADE, related_name='students', default=None, null=True)

在 Django Teacher 的管理页面(THIS-> /admin/users/teacher/,不是 THIS -> /admin/users/teacher/1/change/)我想:

我通常会使用类似以下内容向此页面添加字段:

class StudentAdmin(admin.ModelAdmin):
    list_display = ('user', 'teacher',)

但由于这是一对多关系,而且我正在访问 'many',我迷路了。

谢谢。

如果您想将学生人数添加到教师列表视图,您可以添加一个只读字段(与更改视图一样)

class StudentAdmin(admin.ModelAdmin):
    list_display = ('user', 'teacher','student_count')

    def student_count(self, obj):
        return obj.students.count()

这应该可以解决问题。

在这种情况下,obj 指的是每行中 Teacher 对象的特定实例。您可以将上面的函数调整为 return 个学生列表。不过,我不确定这在 Teacher 列表视图页面上看起来是否特别好。可能最好将它放在可以轻松放在一排的东西上。