带有列表视图的 Django 模型 related_list

问题描述

首先,我有一个学生模型和一个咨询模型。

一个学生模型有数百个咨询模型。

我想将每个科目(分类)的最后咨询日期制作成每个学生的列表视图。

如果做到了,老师一看就知道谁咨询的时间最长,谁的咨询时间最近。

有什么办法吗?

咨询模型.py

class Consultation(models.Model):
    classification = models.CharField(
        max_length=10,choices=CLASSIFICATION,# there are 'korean','english','math','etc ... '
        default='etc',)
    content = models.TextField(max_length=1000,blank=False,verbose_name='contentt')
    created_to = models.ForeignKey(
        Student,related_name='consultations',verbose_name='student',on_delete=models.CASCADE
    )
    created_at = models.DateTimeField(default=datetime.Now,verbose_name='time')

学生 mnodel.py

class Student(models.Model):
    name = models.CharField(max_length=255,verbose_name='이름')

如果可以,我想使用 ListView

class StudentList(ListView):
    model = Student
    template_name = 'student/list.html'
    context_object_name = 'students'
    paginate_by = 10
    blah blah blah 


我想做的是

学生姓名 韩国主题最后咨询日期 英文科目最后咨询日期 数学科目最后咨询日期
学生姓名 韩国主题最后咨询日期 英文科目最后咨询日期 数学科目最后咨询日期
学生姓名 韩国主题最后咨询日期 英文科目最后咨询日期 数学科目最后咨询日期
学生姓名 韩国主题最后咨询日期 英文科目最后咨询日期 数学科目最后咨询日期
学生姓名 韩国主题最后咨询日期 英文科目最后咨询日期 数学科目最后咨询日期

解决方法

class Student(models.Model):
    name = models.CharField(max_length=255,verbose_name='이름')
    
    def last_consult_korean(self):
        last_date=self.consultations.filter(classification='korean').order_by('-created_at').first()
        return last_date.created_at if last_date else ''

在您的模型中编写这样的函数,并在您的模板调用中编写 {{ student.last_consult_korean }}