2017-04-13 103 views
0

我有一個模型定義爲最新的項目:Django的過濾器由不同領域的對象,並得到

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> 

我怎麼能寫(在上面的代碼過濾器(東西))過濾器?

回答

0

可能,這將有助於

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

任何方式來獲得模型實例,而不是價值?雖然我可以用這些值再次查詢,但如果我有大量的記錄,則不好。如果我想在get_queryset中做到這一點,這會有點困難。 – vts

+0

刪除'values'調用,您將擁有乾淨的模型。 –

+0

嗨Gianluca,你是什麼意思'刪除值調用'?你能幫我看看確切的路線嗎? – vts