Получаем ошибку "Значение 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>
Каким образом можно устранить эту проблему?
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})