python - 在 Django 的模型查询集中使用 self.request.user

标签 python django django-models django-queryset

我正在使用 Django 2

我有一个模型,在其中编写了一个查询集类来添加搜索功能。

我只想显示与经过身份验证的用户关联的那些结果。为此,我在查询集中的过滤器中使用 user=self.request.user

Notes/model.py

class NoteQuerySet(models.query.QuerySet):
    def authenticated(self):
        return self.filter(user=self.request.user)

    def search(self, query):
        lookups = Q(title__icontains=query) | Q(tags__icontains=query)
        return self.filter(lookups).authenticated().distinct()


class NoteManager(models.Manager):
    def get_queryset(self):
        return NoteQuerySet(self.model, using=self._db)

    def search(self, query):
        return self.get_queryset().search(query)


class Note(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    title = models.CharField(max_length=250, blank=True, default='Untitled')
    tags = models.CharField(max_length=150, blank=True)

    objects = NoteManager()

    def __str__(self):
        return self.title

    def get_absolute_url(self):
        return reverse('notes:update', kwargs={'pk': self.pk})

Notes/views.py

class SearchNoteView(ListView):
    template_name = 'notes/my_notes.html'
    context_object_name = 'notes'

    def get_queryset(self, *args, **kwargs):
        query = self.request.GET.get('q', None)
        if query is not None:
            return Note.objects.search(query)

但这返回错误为

AttributeError: 'NoteQuerySet' object has no attribute 'request'

正如错误所述,它正在尝试在类中查找request 函数。

如何在查询集类中使用request

最佳答案

您必须以某种方式传递用户对象:

class NoteQuerySet(models.query.QuerySet):
    def authenticated(self, user):
        return self.filter(user=user)

我认为直接使用filter会更清晰:

 Note.objects.filter(user=self.request.user).search(query)

关于python - 在 Django 的模型查询集中使用 self.request.user,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47821864/

相关文章:

python - CalledProcessError : Command '[' convert', '--version' ]'返回非零退出状态1

python - Cbv View 对象在django中没有属性 'object'

django - 你可以在与 Django 不同的容器中运行 Celery 吗?

python - 在 Django 管理界面中设置与所选模型类的关系

python - 在 Python 中使用逗号、连接和字符串格式化程序之间的区别

python - 使用 sqlalchemy 和 PostgreSQL 查询二进制数据

python - 在 ipython notebook 中自动向下滚动到结果的底部

python - Django:form_valid 和模型验证

python - Django 多对多查询和表查询

python - 属性错误 : 'ManyToManyField' object has no attribute '_m2m_reverse_name_cache'