django表搜索方法,过滤器,index_together或haystack

时间:2014-02-20 09:35:32

标签: django indexing django-haystack

这涉及学生电子日记。学生页面包含当天所有学习时段,每个时段可以附加一段或多段时间。

目前我的代码是:

notes = []
for note in db.StudentPeriodNote.objects.all():
    if student_id == note.student_id:
        if day == note.day:
            if period == note.period_text:
                notes.append(note)

或者可能是: -

notes = db.StudentPeriodNote.objects.filter(student_id=student_id, day=day, period=period)

在学年结束时,表中可能有10-100,000个笔记。 每个句点调用一次此查询,因此每天查询10-12次,或一周查询的5次。

我担心的是,对于学生每次显示一天或几周时间表的请求,多次调用此查询将会很慢。

我可以在三个字段上使用index_together来加速搜索(注意:如果我将index_together添加到models.py然后运行dbsync,是否会创建索引或者我是否需要再次加载数据?)

我没有使用干草堆,这是否适合干草堆使用?

1 个答案:

答案 0 :(得分:1)

我不知道index_together或haystack是否更适合您的问题,但我可以回答您关于将index_together添加到模型中的问题。

对于Django< 1.7,Django不会在初始syncdb之后更改数据库。如果要迁移模型和数据,则必须使用South,第三方Django应用程序。

http://south.aeracode.org/

网站上的文档非常好,一旦您学习了基础知识,它就很容易使用。我在我的所有Django项目中使用它来随着需求和功能的变化慢慢变形模型和数据。

对于Django> = 1.7(尚未发布),模型和数据迁移将包含在Django中,您不必使用South。

https://docs.djangoproject.com/en/1.7/topics/migrations/