我有一个 Author 模型,MySQL 数据库中有 200k 个实例。我想让用户搜索作者的唯一 ID(这是一个字符串),然后选择一个 ID,然后生成有关该作者的表格和小图形。
我想使用 charfield 模型表单吗?另外,有内置的搜索功能吗?
最佳答案
我认为 Django 没有内置的搜索功能。为此,您必须使用其扩展之一(django-search 或 haystack)。
对于您的情况来说,它们可能看起来太复杂,所以我会选择更简单的解决方案(并且我会放弃使用表单):
from django.views.generic import ListView
from django.db.models import Q
from .models import Author
def SearchAuthorView(ListView):
def get_queryset(self):
name = self.request.GET['author_name']
name_tokens = name.split(' ')
matched_authors = []
authors = Author.objects.all()
for author in authors:
for name_token in author.name.split(' '):
if name_token in name_tokens:
matched_authors.append(author)
break
return matched_authors
使用 200k 时,您可能会遇到性能问题,因此如果遇到这种情况,您应该使用优化的原始 MySql 查询。
您可能还想以某种方式订购您的结果。例如,姓氏匹配的优先级高于名字匹配的优先级。
关于python - 不确定我应该使用什么类型的 Django 表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25007834/