代码之家  ›  专栏  ›  技术社区  ›  Anuj TBE

使用self。要求Django中模型queryset中的用户

  •  1
  • Anuj TBE  · 技术社区  · 7 年前

    我正在使用Django 2

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

    我只想显示那些与经过身份验证的用户关联的结果。我用的是 user=self.request.user 在queryset中的筛选器中

    注释/型号。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})
    

    在里面 注释/视图。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 在课堂上的作用。

    如何使用 要求 在queryset类中?

    1 回复  |  直到 7 年前
        1
  •  1
  •   Blender    7 年前

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

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

    我想如果你直接使用 filter :

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