Django按不同的字段过滤对象并获取最新的项目

时间:2017-04-13 10:03:42

标签: django django-models

我的模型定义为:

from django.db import models

class BookManager(models.Manager):
    def latest_book(self):
        return super(BookManager, self).get_queryset().filter(something)

class Book(models.Model):
    name = models.CharField(max_length=200)
    author = models.CharField(max_length=200)
    version = models.IntegerField(default=0)

    objects = BookManager()

    def __unicode__(self):
        return "%s : %s : %s" % (self.name, self.author, self.version)

具有相同名称和作者的书籍被视为同一本书,但它们可以具有不同的版本。我想过滤掉(名称+作者)的最新(通过比较版本)书籍,例如:

有这样的书:

Good Time : Andy : 1
Good Time : Andy : 2
Good Time : Andy : 3
My Django Book : Jim : 1
My Django Book : Jim : 2
My Django Book : Jim : 3
Python Tutorial : Tom : 1
Python Tutorial : Tom : 2
Python Tutorial : Tom : 3
Python Tutorial : Tom : 4
Python CookBook : Tom : 1
Python CookBook : Tom : 2

我想用:

过滤它
from books.models import Book
Book.objects.latest_book()

并期待结果为:

 <Book: Good Time : Andy : 3>
 <Book: My Django Book : Jim : 3>
 <Book: Python Tutorial : Tom : 4>
 <Book: Python CookBook : Tom : 2>

如何在上面的代码中编写过滤器(filer(某事物))?

1 个答案:

答案 0 :(得分:0)

可能会有所帮助

from django.db.models import Max
Book.objects.values('name', 'author').order_by().annotate(version=Max('version'))