【发布时间】: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