我的模型定义为:
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(某事物))?
答案 0 :(得分:0)
可能会有所帮助
from django.db.models import Max
Book.objects.values('name', 'author').order_by().annotate(version=Max('version'))