gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 14:23:06 25 4
gpt4 key购买 nike

我正在使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com