2016-06-07 9 views
0

Ich habe eine Ansicht, die Ihnen erlaubt, Kurse zu suchen und zeigt Ihnen das/die Profil (e) (die wiederum zu einem Benutzer gehören), die diese Kurse belegt haben. Die Suche funktioniert gut, aber das Problem ist, dass sie nicht auf der Benutzer-ID basiert.Django-Filter filtert nicht nach 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)) 

Nun, ich habe überprüft, ob die rechten Fremdschlüssel übergeben werden, und es ist, aber für einen Benutzer zeigt es all die Kurse und für den zweiten Benutzer zeigt es keine Kurse an.

ich viele verschiedene Filtervariationen ausprobiert habe, aber nicht gearbeitet haben:

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)) 

Aber keiner von ihnen gearbeitet haben. Was vermisse ich?

HINWEIS: Die Abfrage, die ich übergebe, ist "10 Stunde", und ich bekomme den Fremdschlüssel von der URL über Kwargs. Wie vorab erwähnt. Die Suche funktioniert und erhält die richtigen Daten, es ist nur, dass es die Daten nicht basierend auf der gesendeten ID filtert, es gibt mir nur alle Daten.

+1

Wie kann jemand antworten, ohne SafetyCoursesTaken zu sehen? – e4c5

+0

Fragen Sie nach meinen Modellen? Ich kann bei Bedarf zur Verfügung stellen. – nastyn8

+0

Ja, bitte fügen Sie die Modelle in der Frage hinzu. Und fügen Sie auch hinzu, was genau Sie in der Abfrage etc. passieren. – AKS

Antwort

1

Ich fand es heraus. Als ich den spezifischen Kurs hinzufügte, fügte er den Kurs dem falschen Benutzer hinzu, weil ich self.request.user benutzte, anstatt die Identifikation von der URL über self.kwargs ['pk'] zu ergreifen.

Entschuldigung, dass jemand Zeit verschwendet hat.

+2

Solange Sie daraus gelernt haben, ist es in Ordnung. Sie können Ihre eigene Antwort akzeptieren – e4c5

Verwandte Themen