django - 如何通过名字字段的第一个字母按字母顺序对对象进行排序

don*_*yor 12 python django

我有一个模型,其中包含字段worddefinition.字典模型.

在db中,我有例如这些对象:

word          definition
-------------------------
Banana        Fruit
Apple         also Fruit
Coffee        drink
Run Code Online (Sandbox Code Playgroud)

我想做一个查询,它给出了我,按照第一个字母排序,这个:

Apple - also Fruit
Banana - Fruit    
Coffee -drink
Run Code Online (Sandbox Code Playgroud)

这是我的模特:

class Wiki(models.Model):
   word = models.TextField() 
   definition = models.TextField()
Run Code Online (Sandbox Code Playgroud)

我想在视图中创建它,而不是在模板中.这怎么可能在django?

Aya*_*Aya 26

鉴于模型......

class Wiki(models.Model):
   word = models.TextField() 
   definition = models.TextField()
Run Code Online (Sandbox Code Playgroud)

...代码...

my_words = Wiki.objects.order_by('word')
Run Code Online (Sandbox Code Playgroud)

...应该以正确的顺序返回记录.

但是,word如果类型为TextField,则无法在字段上创建索引,因此word如果表中有很多行,则排序将花费很长时间.

我建议把它改成......

class Wiki(models.Model):
   word = models.CharField(max_length=255, unique=True) 
   definition = models.TextField()
Run Code Online (Sandbox Code Playgroud)

...它不仅会在word列上创建索引,还会确保您不能两次定义相同的单词.


Kru*_*lur 6

既然你标记了你的问题Django,我将回答如何使用Django实体做到这一点.

首先,定义您的实体,如:

class FruitWords(models.Model):
    word = models.StringField()
    definition = models.StringField()

    def __str__(self):
        return "%s - %s" % (self.word, self.definition)
Run Code Online (Sandbox Code Playgroud)

要获得列表:

for fruit in FruitWords.all_objects.order_by("word"):
    print str(fruit)
Run Code Online (Sandbox Code Playgroud)