简体   繁体   English

Django过滤器未按user_id过滤

[英]Django filter not filtering by user_id

I have a view that allows you to search courses and shows you the profile/s(which in turn belong to a user) that have taken those courses. 我有一个视图,可以让您搜索课程,并向您显示上过这些课程的个人资料(又属于用户)。 The search is working just fine but the problem is that it's not filtering based on the user_id. 搜索工作正常,但问题是它没有基于user_id进行过滤。

models.py 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 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))

Now, I have checked whether the right foreign key is being passed, and it is but for one user it displays all the courses, and for the second user, it displays no courses. 现在,我检查了是否传递了正确的外键,但只有一个用户可以显示所有课程,而第二个用户则不显示任何课程。

I've tried many different filter variations but not have worked: 我尝试了许多不同的过滤器变体,但没有起作用:

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

But none of these have worked. 但是这些都不起作用。 What am I missing? 我想念什么?

NOTE: The query I'm passing is "10 Hour", and I'm getting the foreign key from the URL via kwargs. 注意:我传递的查询是“ 10 Hour”,并且我正在通过kwargs从URL获取外键。 As previously mentioned. 就像之前提到的。 The search is working and getting the correct data, it's just that it's not filtering the data based on the id being sent, it's just giving me all the data. 搜索工作正常并获得了正确的数据,只是它没有根据发送的ID过滤数据,而是给了我所有数据。

I figured it out. 我想到了。 When I added the specific course, it was adding the course to the wrong user because I was using self.request.user instead of grabbing the id from the URL via self.kwargs['pk']. 当我添加特定课程时,它是将课程添加到错误的用户,因为我使用的是self.request.user而不是通过self.kwargs ['pk']从URL中获取ID。

Sorry to have wasted anyone's time. 很抱歉浪费了任何人的时间。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM