Получаем ошибку "Значение QuerySet для точного поиска должно быть ограничено одним результатом с помощью нарезки. "

Я пытаюсь создать lms с помощью django. У меня есть отдельная модель для преподавателей, которые могут загружать курсы, и другая модель для курсов. Код приведен ниже: 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>

Я получаю ошибку: enter image description here

Каким образом можно устранить эту проблему?

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})
Вернуться на верх