根据下面的模型,我想对字段(序列、股票)进行索引

class QuoteModel(models.Model):  
    quotedate =  models.DateField()  
    high = models.FloatField() #(9,2) DEFAULT NULL,  
    low  = models.FloatField() #(9,2) DEFAULT NULL,  
    close  = models.FloatField() #(9,2) DEFAULT NULL,  
    closeadj  = models.FloatField() #(9,2) DEFAULT NULL,  
    volume  = models.IntegerField() #(9,2) DEFAULT NULL,  
    stock  = models.IntegerField(db_index=True) #(9,2) DEFAULT NULL,  
    open  = models.FloatField() #(9,2) DEFAULT NULL,  
    sequence = models.IntegerField() #(9,2) DEFAULT NULL,  

这个索引应该是非唯一的——在mysql中应该是这样的:

create index ndx_1 on model_quotemodel(sequence,stock);

据我所知,Django唯一的解决办法是创建一个"SQL"文件,Django将在创建表时执行该文件.因此,我创建了一个包含以下查询的"stock model.sql"(同上:)

create index ndx_1 on model_quotemodel(sequence,stock);

有没有什么"干净"的方法呢?

推荐答案

从Django 1.5开始,您可以使用Meta.index_together option:

class QuoteModel(models.Model):
    # ... fields ...

    class Meta:
        index_together = [
            ("sequence", "stock"),
        ]

(注:2009年的原始答案说不可能索引多个字段;后来被替换)

Django相关问答推荐

Django:我的上下文变量不能用于重复的for循环

设置wagail开发环境时出现ImportError:";无法从';wagta.search;";导入名称.

Django:作为模型中的列表元素的字段

Django多对多关系报错:<title> object (None)>需要先设置id字段的值.

如何将我的函数添加到值参数?

过滤查询以获取两个朋友之间的聊天消息?

如何重命名标准 django-registration 模板的名称

Django ModelForm提交按钮不起作用

Django 身份验证系统修改

相同的字符串不同的翻译

如何使用自定义 AdminSite 类?

ImportError:无法导入设置

Django 向用户推送 HTTP 响应

带有消息判断的 Django/Python assertRaises

Python:获取异常的错误消息

如何在不发送信号的情况下保存模型?

Django:如何过滤属于特定组的用户

Django - 一起为 2 个或更多字段创建唯一的数据库约束

Django 的 Select .如何设置默认选项?

Python Django 的多线程