亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

django ValueError 無法查詢“ [email protected] ”:必須是“對象”實例

django ValueError 無法查詢“ [email protected] ”:必須是“對象”實例

慕田峪4524236 2023-12-05 15:18:38
我正在嘗試為學生制作一個應用程序,但我收到了此錯誤,正如您所看到的,為了方便起見,我想使用如下所示的應用程序,但它不起作用,我應該像以前一樣繼續使用嗎?或者我可以這樣使用?最好的辦法是什么?/student/program_struct/ 處的 ValueError 無法查詢“ [email protected] ”:必須是“學生”實例。太感謝了 :)models.pyclass 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)
查看完整描述

1 回答

?
jeck貓

TA貢獻1909條經驗 獲得超7個贊

該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時重用:profileCourse


from django.shortcuts import get_object_or_404


class 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_404


class 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)


查看完整回答
反對 回復 2023-12-05
  • 1 回答
  • 0 關注
  • 147 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號