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)