如何在Django中过滤两个外键

时间:2019-10-11 17:51:57

标签: django

int()参数必须是字符串,类似字节的对象或数字,而不是'ForwardManyToOneDescriptor'

class StudentsEnrollmentRecord(models.Model):
    Student_Users = models.ForeignKey(StudentProfile, related_name='+', on_delete=models.CASCADE,null=True)
    School_Year = models.ForeignKey(SchoolYear, related_name='+', on_delete=models.CASCADE, null=True, blank=True)
    Courses = models.ForeignKey(Course, related_name='+', on_delete=models.CASCADE, null=True, blank=True)
    Section = models.ForeignKey(Section, related_name='+', on_delete=models.CASCADE, null=True,blank=True)
    Payment_Type = models.ForeignKey(PaymentType, related_name='+', on_delete=models.CASCADE, null=True)
    Education_Levels = models.ForeignKey(EducationLevel, related_name='gradelevel', on_delete=models.CASCADE,blank=True,null=True)
    Remarks = models.TextField(max_length=500,null=True,blank=True)
    def __str__(self):
        suser = '{0.Student_Users}  {0.Education_Levels}'
        return suser.format(self)
class SubjectSectionTeacher(models.Model):
    School_Year = models.ForeignKey(SchoolYear, related_name='+', on_delete=models.CASCADE,null=True)
    Education_Levels = models.ForeignKey(EducationLevel, related_name='gradelevel', on_delete=models.CASCADE,blank=True)
    Courses= models.ForeignKey(Course, related_name='+', on_delete=models.CASCADE,null=True,blank=True)
    Sections= models.ForeignKey(Section, related_name='+', on_delete=models.CASCADE,null=True)
    Subjects= models.ForeignKey(Subject, related_name='+', on_delete=models.CASCADE,null=True)
    Employee_Users= models.ForeignKey(EmployeeUser, related_name='+', on_delete=models.CASCADE,null=True)
    Start_Date = models.DateField(null=True,blank=True)
    End_Date = models.DateField(null=True,blank=True)
    Remarks = models.TextField(max_length=500)
    def __str__(self):
        suser = '{0.Employee_Users}'
        return suser.format(self)

你们能帮助我如何将StudentsEnrollmentRecord(Education_Levels)过滤为SubjectSectionTeacher(Education_Levels),因为真的很难理解django过滤器,我已经为这个错误浪费了2天。

这是我的观点

def enrollmentform(request):
    id = request.GET.get('StudentID')
    if StudentsEnrollmentRecord.objects.filter(Student_Users=id).exists():
      studentenroll = StudentsEnrollmentRecord.objects.filter(Student_Users=id)
      FeesType = SchoolFeesMasterList.objects.filter(Education_Levels=StudentsEnrollmentRecord.Education_Levels)
      return render(request, 'Homepage/enrollmentrecords.html',{"studentenroll":studentenroll,"SchoolFeesType":FeesType})
    else:
    .
    .
    .
      return render(request, 'Homepage/EnrollmentForm.html',
                    {"students": students, "edulevel": edulevel, "payment": payment, 'sched': sched, 'subj': subj,
                     "year": year, "doc": doc,"education":education,"payments":payments})

1 个答案:

答案 0 :(得分:0)

从您发布的内容中,您试图查找与在get请求中发回的学生证相关的学生记录的费用。因此,在那种情况下,您需要查询返回的对象的Education_Level,而不是模型中定义为字段的Education_Level。如果这不是您要执行的操作,请在评论中进行说明,然后我可以进行编辑。

def enrollmentform(request):
    id = request.GET.get('StudentID')
    studentenroll = StudentsEnrollmentRecord.objects.filter(Student_Users=id)
    if studentenroll.exists(): 
        fees = SchoolFeesMasterList.objects.filter(Education_Levels__in=studentenroll.values_list('Education_Levels'))
        return # <what you want to return from these queries>
    else:
        return # <what you want to return if the records do not exist>