django ValueError 无法查询“ abcd@gmail.com ”:必须是“对象”实例

我正在尝试为学生制作一个应用程序,但我收到了此错误,正如您所看到的,为了方便起见,我想使用如下所示的应用程序,但它不起作用,我应该像以前一样继续使用吗?或者我可以这样使用?最好的办法是什么?


/student/program_struct/ 处的 ValueError 无法查询“ abcd@gmail.com ”:必须是“学生”实例。


太感谢了 :)


models.py


class Student(models.Model):

    user = models.ForeignKey(

          settings.AUTH_USER_MODEL, on_delete=models.CASCADE, null=True)

    status = models.CharField(max_length=10, choices=STATUS, default='active')

 

 

class Program(models.Model):

        

         #everything was fine when used 


    user = models.ForeignKey(

          settings.AUTH_USER_MODEL, on_delete=models.CASCADE, null=True)  #this one


         #but when using this one i started getting this error from views.py 


    user = models.ForeignKey(

                  Student, on_delete=models.SET_NULL, null=True)


    name = models.CharField(max_length=200, unique=True)

    prefix = models.CharField(max_length=20)



class Course(models.Model):

    user = models.ForeignKey(Student, on_delete=models.SET_NULL, null=True)

    name = models.CharField(max_length=200, unique=True)

    prefix = models.CharField(max_length=20)

    code = models.CharField(max_length=20)


   subject = models.ManyToManyField('Subject', related_name='subject_list', 

                  blank=True)



views.py

       


class Program_structure(generic.View):


    def get(self, *args, **kwargs):

        profile = get_object_or_404(Student, user=self.request.user)

        program_structure = Course.objects.filter(student=profile)

         # program_structure = 

        Course.objects.filter(student__user=self.request.user)



        credit = Course.objects.filter(student__user=self.request.user).

           annotate(total_no=Sum('subject__credit'))


        total_credit = self.request.user.course_set.aggregate(

             total_credit=Sum('subject__credit')

           )['total_credit'] or 0


     context = {

        'test':program_structure,

        'credit':credit,

        'profile':profile,

        'total_credit' : total_credit

    }

    return render(self.request, 'program_structure.html', context)


慕田峪4524236
浏览 99回答 1
1回答

jeck猫

该user字段Course指的是Student对象,而不是User对象,因此您不能使用request.user它。但是,您可以查询Coursewhere the useris a Studentwhere the useris request.user:class Program_structure(generic.View):    def get(self, *args, **kwargs):        profile = Student.objects.all()        program_structure = Course.objects.filter(user__user=self.request.user)        context = {           'test':program_structure,           'profile':profile,        }        return render(self.request, 'program_structure.html', context)您可能还想设置profile为Student用户的对象。在这种情况下,您可以在过滤s时重用:profileCoursefrom django.shortcuts import get_object_or_404class Program_structure(generic.View):    def get(self, *args, **kwargs):        profile = get_object_or_404(Student, user=request.user)        program_structure = Course.objects.filter(user=profile)        context = {           'test':program_structure,            'profile':profile,        }        return render(self.request, 'program_structure.html', context)将该user字段重命名为student:class Course(models.Model):    student = models.ForeignKey(        Student,        on_delete=models.SET_NULL,        null=True    )    # …因为这清楚地表明这是 a Student,而不是 a User。在这种情况下,您可以使用以下内容进行过滤:from django.shortcuts import get_object_or_404class Program_structure(generic.View):    def get(self, *args, **kwargs):        profile = get_object_or_404(Student, user=request.user)        program_structure = Course.objects.filter(student=profile)        context = {           'test':program_structure,            'profile':profile,        }        return render(self.request, 'program_structure.html', context)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python