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.
Wie kann jemand antworten, ohne SafetyCoursesTaken zu sehen? – e4c5
Fragen Sie nach meinen Modellen? Ich kann bei Bedarf zur Verfügung stellen. – nastyn8
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