Django Admin中与显示对象相关的对象参考

时间:2020-06-15 21:02:06

标签: python django 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的Admin页面(此-> / admin / users / teacher /,而不是此-> / admin / users / teacher / 1 / change /)中,我想选择其中一个:

  • 列出所有老师的学生

  • 显示老师拥有的学生总数

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

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

但是因为这是一对多的关系,并且我正在访问“很多”,所以我迷路了。

谢谢。

1 个答案:

答案 0 :(得分:0)

如果您想在教师列表视图中增加学生人数,则可以添加一个只读字段(与更改视图相同)

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

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

这应该可以解决问题。

在这种情况下,obj指每一行中Teacher对象的特定实例。您可以调整上面的功能,以返回学生列表。我不确定Teacher列表视图页面上的显示效果是否特别好。最好将其保存在容易排成一排的东西上。