본인은 코스를 검색하고 해당 코스를 수강 한 프로필 (사용자가 속한 사용자)을 보여주는보기를 가지고 있습니다. 검색은 잘 작동하지만 문제는 user_id를 기반으로 필터링하지 않는다는 것입니다.장고 필터가 user_id로 필터링되지 않음
models.py
class EmployeeProfile(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
first_name = models.CharField(max_length=30)
middle_name = models.CharField(max_length=30, null=True, blank=True)
last_name = models.CharField(max_length=30)
def __str__(self):
return self.first_name + ' ' + self.last_name
class SafetyCourse(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
name = models.CharField(max_length=128, unique=True)
def __str__(self):
return self.name
class SafetyCoursesTaken(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
profile = models.ForeignKey(EmployeeProfile, on_delete=models.CASCADE)
course = models.ForeignKey(SafetyCourse, on_delete=models.CASCADE)
conducted_date = models.DateTimeField(null=True, blank=True)
expiration_date = models.DateTimeField(null=True, blank=True)
class Meta:
verbose_name_plural = 'Safety Courses Taken'
Views.py
class CourseSearchView(LoginRequiredMixin, SuccessMessageMixin, generic.ListView):
login_url = reverse_lazy('users:login')
template_name = 'ppm/forms/search-courses.html'
def get_queryset(self):
pk = self.kwargs['pk']
query = self.request.GET.get('q')
# verify proper foreign key is being passed
print(pk)
if query:
# for lookups that span relationships go here: https://docs.djangoproject.com/en/1.9/topics/db/queries/
return SafetyCoursesTaken.objects.filter(Q(course__user_id=pk) & Q(course__name__icontains=query))
지금, 나는 오른쪽 외래 키가 전달되고 있는지 여부를 확인하신 후, 그것은하지만 한 사용자가 모든를 표시 두 번째 사용자에게는 코스가 표시되지 않습니다. 나는 많은 다른 필터 변화를 시도했지만 적이 없다
는 일한 :
이SafetyCoursesTaken.objects.filter(Q(course__user_id=pk) & Q(course__name__icontains=query))
SafetyCoursesTaken.objects.filter(Q(course__name__icontains=query),
user_id=pk)
SafetyCoursesTaken.objects.filter(Q(course__name__icontains=query)).filter(user_id=pk)
SafetyCoursesTaken.objects.filter(user_id=pk).filter(Q(course__name__icontains=query))
그러나 이들의 방법으로도 문제가 해결되지있다. 내가 뭘 놓치고 있니?
참고 : 통과하는 쿼리는 "10 시간"이며 kwargs를 통해 URL에서 외래 키를 가져옵니다. 앞에서 언급했듯이. 검색이 작동하고 올바른 데이터를 가져 오는 중, 전송되는 ID를 기반으로 데이터를 필터링하지 않고 모든 데이터를 제공합니다.
누구나 SafetyCoursesTaken을 보지 않고 대답 할 수 있습니까? – e4c5
내 모델을 확인 하시겠습니까? 필요한 경우 제공 할 수 있습니다. – nastyn8
예, 질문에 모델을 추가하십시오. 그리고 정확하게 쿼리 등을 전달하는 것을 추가하십시오. – AKS