收到错误 "The QuerySet value for an exact lookup must be limited to one result using slicing. "

getting the error "The QuerySet value for an exact lookup must be limited to one result using slicing. "

我正在尝试用 django 创建 lms。所以我有一个单独的模型供可以上传课程的教师使用,还有另一个模型用于课程。代码如下: models.py

class teacher(models.Model):
    name=models.ForeignKey(User, on_delete= models.CASCADE)
    area=models.ManyToManyField(subject)
    description=RichTextField()


class course(models.Model):
    title=models.CharField(max_length=500)
    areas=models.ManyToManyField(subject)
    description=RichTextField()
    instructor=models.ForeignKey(teacher, on_delete= models.CASCADE)
    material=models.CharField(max_length=1000)

    def __str__(self):
        return self.title

在我的 views.py 文件中:

instr=teacher.objects.filter(name=request.user)
data2=models.course.objects.filter(instructor__name__username=instr)
    
return render(request, "course/profile.html", {'datas':a, 'courses': data, 'creations':data2})

在模板中:

<div class="col-md-12"><label class="labels">Created Courses</label>
                {% for data in creations %}
                <form action="/course/" method="GET">
                    <div class="w3-display-container w3-col s12 m4 l4 w3-section">
                      <div class="card" style="width: 30rem; height: 30rem;">
                        <div class="card-body hover_trans_grey">
                          <h5 class="card-title">{{data.title}}</h5>
                          <h6 class='card-title'>Uploaded by {{data.instructor.name}}</h6>
                          <button type="submit" class="btn btn-primary w3-button" name="s" value="{{data.pk}}">Go to Course</button>
                        </div>
                      </div>
                      
                       
                      </div>
                    
                    
                  </form>
                {% endfor %}
            </div>

我收到错误:

解决这个问题的方法是什么?

instr 是一个 QuerySet 你不能像你那样直接将它添加到过滤器中。 您可以使用 request.user

直接获取课程列表
data2=models.course.objects.filter(instructor__name=request.user)
return render(request, "course/profile.html", {'datas':a, 'courses': data, 'creations':data2})

如果你想先得到 teacher 那么你必须使用 get:

instr=teacher.objects.get(name=request.user)   
data2=models.course.objects.filter(instructor=instr)

return render(request, "course/profile.html", {'datas':a, 'courses': data, 'creations':data2})