首页 > 解决方案 > Django 自定义查询集不返回任何内容

问题描述

我正在尝试为我的学生资料列表编写一个年级过滤器,但是,查询返回一个空的 []。

这是我的出勤模型、经理和自定义查询集:

    class AttendanceQuerySet(models.QuerySet):
        def get_yearlevel(self, yearlevel):
            return self.filter(BCEID__YearLevel = yearlevel)

    class AttendanceManager(models.Manager):
        def get_queryset(self):
            return AttendanceQuerySet(self.model, using=self._db)
    
        def get_yearlevel(self, yearlevel):
            return self.get_queryset().get_yearlevel(yearlevel)
    
    class Attendance(models.Model):
        BCEID = models.OneToOneField(StudentProfile,primary_key=True,on_delete=models.CASCADE)
        AttendanceRate = models.CharField(max_length=10)
        objects = AttendanceManager()
    
        def __unicode__(self):
            return self.BCEID

学生档案模型:

    class StudentProfile(models.Model):
       RelatedPersonName = models.CharField(max_length=10)
       RelatedPersonFirstName = models.CharField(max_length=30)
       RelatedPersonFamName = models.CharField(max_length=30)
       StudentLegalName = models.CharField(max_length=30)
       StudentFamName = models.CharField(max_length=30)
       Email = models.CharField(max_length=130)
       Street1  = models.TextField(max_length=30)
       Suburb = models.CharField(max_length=30)
       State = models.CharField(max_length=5)
       PostCode = models.CharField(max_length=6)
       StudentLegalName = models.CharField(max_length=30)
       StudentFamName = models.CharField(max_length=30)
       StudentNo = models.CharField(primary_key=True,max_length=10)
       Class = models.CharField(max_length=6)
       YearLevel = models.CharField(max_length=10)
       objects = StudentProfileManager()
    
    def __unicode__(self):
        return self.StudentNo

和出席列表视图(views.py)

    class AttendanceListView(ListView):
       model = Attendance

       queryset = Attendance.objects.get_yearlevel("Year 8")

我手动查询数据库检查我的代码是否有错误,得到了相同的结果:一个空数组[]。

SQL:

    SELECT "student_attendance"."BCEID_id",
       "student_attendance"."AttendanceRate"
    FROM "student_attendance"
    INNER JOIN "student_studentprofile"
       ON ("student_attendance"."BCEID_id" = "student_studentprofile"."StudentNo")
    WHERE "student_studentprofile"."YearLevel" = 'Year 8'

请让我知道我在这里做错了什么。

标签: djangopostgresqldjango-queryset

解决方案


推荐阅读