Django - как отсортировать объекты по алфавиту с помощью первой буквы поля имени

У меня есть модель, которая имеет поля word и definition. модель словаря.

в db, я имею, например, следующие объекты:

word          definition
-------------------------
Banana        Fruit
Apple         also Fruit
Coffee        drink

Я хочу сделать запрос, который дает мне, сортируя по первой букве слова:

Apple - also Fruit
Banana - Fruit    
Coffee -drink

это моя модель:

class Wiki(models.Model):
   word = models.TextField() 
   definition = models.TextField()

Я хочу сделать это в виде, а не в шаблоне. как это возможно в джанго?

Ответ 1

Учитывая модель...

class Wiki(models.Model):
   word = models.TextField() 
   definition = models.TextField()

... код...

my_words = Wiki.objects.order_by('word')

... должен возвращать записи в правильном порядке.

Однако вы не сможете создать индекс в поле word, если тип TextField, поэтому сортировка по word займет много времени, если в вашей таблице много строк.

Я бы предложил изменить его на...

class Wiki(models.Model):
   word = models.CharField(max_length=255, unique=True) 
   definition = models.TextField()

... который не только создаст индекс в столбце word, но также гарантирует, что вы не можете определить одно и то же слово дважды.

Ответ 2

Поскольку вы отметили свой вопрос Django, я отвечу, как это сделать, используя сущности Django.

Сначала определите свой объект как:

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

    def __str__(self):
        return "%s - %s" % (self.word, self.definition)

Чтобы получить список:

for fruit in FruitWords.all_objects.order_by("word"):
    print str(fruit)