2016-06-07 4 views
0

본인은 코스를 검색하고 해당 코스를 수강 한 프로필 (사용자가 속한 사용자)을 보여주는보기를 가지고 있습니다. 검색은 잘 작동하지만 문제는 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를 기반으로 데이터를 필터링하지 않고 모든 데이터를 제공합니다.

+1

누구나 SafetyCoursesTaken을 보지 않고 대답 할 수 있습니까? – e4c5

+0

내 모델을 확인 하시겠습니까? 필요한 경우 제공 할 수 있습니다. – nastyn8

+0

예, 질문에 모델을 추가하십시오. 그리고 정확하게 쿼리 등을 전달하는 것을 추가하십시오. – AKS

답변

1

나는 그것을 알아 냈다. 특정 코스를 추가 할 때 self.kwargs [ 'pk']를 통해 URL에서 ID를 가져 오는 대신 self.request.user를 사용했기 때문에 잘못된 사용자에게 코스를 추가하고있었습니다.

불편을 끼쳐 드려 죄송합니다.

+2

괜찮 으면 배웠습니다. 당신은 당신 자신의 대답을 수락 할 수 있습니다. – e4c5

관련 문제