不确定我应该使用什么类型的Django表单

时间:2014-07-29 03:31:30

标签: python django forms

我在MySQL数据库中有一个200k实例的Author模型。我想让用户搜索作者的唯一ID(这是一个字符串),然后选择一个ID,然后生成一个表和关于该作者的小图。

我想使用charfield模型表单吗?还有内置的搜索功能吗?

2 个答案:

答案 0 :(得分:2)

我不认为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查询。

您可能还想以某种方式订购结果。例如,给姓氏的匹配优先级高于名字的匹配。

答案 1 :(得分:1)

老实说,我不明白这个问题。你有一个名为Author的表,有200k个实例,你希望有可能找到其中一个。这可以通过views.py

中的简单功能来完成
def search_author(request, author_id):
    author = Author.objects.get(id=author_id)
    return render_to_response('your/path/to/template', {'author': author}, RequestContext(request)) 

然后在template中,您只需显示信息:

<div class="author">
    <p>{{author.name}}</p>
    <p>{{author.image}}</p>
</div>

当然,如果您的models.py看起来像这样:

class Author(models.Model):
    name = models.CharField(max_number=100)
    image ....