【问题标题】:queryset object not callable Django查询集对象不可调用 Django
【发布时间】:2018-02-09 18:37:54
【问题描述】:

我想制作一个搜索栏,在数据库中搜索 django 中的查询,并且到目前为止已经提出了这个:

查看:

class IndexView(LoginRequiredMixin, generic.ListView):

    template_name = 'patients/index.html'
    context_object_name = 'all_patients'

    def get_queryset(self):
        queryset = patient.objects.all()
        query = self.request.GET.get('q')

        if query:
            queryset = queryset.filter(
                Q(First_Name__icontains=query) |
                Q(Surname__icontains=query) |
                Q(DOB__icontains=query)
            ).distinct()
            return queryset

        else:
            return patient.objects.all()

还有我模板上的按钮:

<form class="navbar-form navbar-left" role="search" method="get" action="{% url 'patients:index' %}">
  <div class="form-group">
    <input type="text" class="form-control" name="q" value="{{ request.GET.q }}">
  </div>
  <button type="submit" class="btn btn-default">Search</button>
</form>

和模型:

class patient(models.Model):

    TITLE_CHOICES = (
        ('Mr', 'Mr'),
        ('Mrs', 'Mrs'),
        ('Ms', 'Ms'),
        ('Miss', 'Miss'),
    )

    Title = models.CharField(max_length=100, blank=True, choices=TITLE_CHOICES)
    First_Name = models.CharField(max_length=250, default='')
    Surname = models.CharField(max_length=250, default='')
    DOB = models.DateField()
    ...

    def get_absolute_url(self):
        return reverse('patients:patientInfo', kwargs={"pk":self.pk})

    def __str__(self):
        return self.First_Name + " " + self.Surname

我收到错误:

TypeError: 'QuerySet' 对象不可调用

我不知道我做错了什么,并且对 Django 很陌生。

【问题讨论】:

  • 嗨!您正在做一个从 Django LoginMixin 和通用视图类继承的基于类的视图......这不是初学者的东西。该错误来自您在视图中继承的 LoginRequireMixin 类。仔细检查您是否真的需要这个,否则请查看此类文档。
  • @Tico 你的评论都不是真的。回溯显示没有迹象表明 LoginRequired mixin 是罪魁祸首;并且使用它对于初学者来说是一件非常有效的事情。
  • 您发布的代码在我看来没问题。你确定这就是你正在运行的。确保您已保存文件并重新启动服务器。
  • 呃……你们是对的。也许试试: return list(queryset) 或 return list(queryset.values()) 可能会解决它。
  • 大家好,事实证明这是一个简单的问题,而不是 'queryset',我应该在 index.html 中使用 'all_patients',我使用的是 'if all_patients'。不过感谢您的帮助!

标签: python django search navbar


【解决方案1】:

我在添加属性时遇到了这个问题,然后它是一个方法,不能被调用

@property
def get_queryset(self):

所以我通过删除属性来修复它

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-08-27
    • 2011-11-29
    • 2014-02-06
    • 2015-07-15
    • 2019-07-02
    • 2013-12-11
    • 2021-10-26
    相关资源
    最近更新 更多