20

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

在 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()

我想在视图中制作它,而不是在模板中。这在 Django 中怎么可能?

4

4 回答 4

38

鉴于模型...

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

...编码...

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

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

word但是,如果 type 是,您将无法在字段上创建索引TextField,因此如果您的表中有很多行,排序方式word将需要很长时间。

建议改成...

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

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

于 2013-05-27T20:12:54.543 回答
7

既然您标记了您的问题 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)
于 2013-05-27T18:45:10.283 回答
1

如果您使用基于类的 ListView

class WikiListView(ListView):
        model = Wiki
        template_name = # Path to your html code. Example: 'appName/htmlFileName.html

        def get_context_data(self, *args, **kwargs):
            wiki_list = Wiki.objects.order_by('word')
            context = super(WikiListView, self).get_context_data(*args, **kwargs)
            context["wiki_list"] = wiki_list
            return context

如果您使用的是简单视图

def WikiView(request):
    wiki_list = Wiki.objects.order_by('word')
    return render(request, """HTML File""", {'wiki_list': wiki_list})
于 2021-08-29T05:29:05.833 回答
0

例如,我有一个具有字段的Article对象。title

articles = list(sorted(articles, key=lambda obj:obj.title))

您可能遇到的问题是您必须要求QuerySet在类方法中返回类似get_queryset的情况,解决方案是停止使用基于类的视图并切换到函数视图。

于 2021-11-29T13:15:31.883 回答