2012-04-16 3 views
0

I持って次のモデル:Letterが作成された新しいLetter Versionを編集するDjangoは:サブモデルによりモデルと順序を選択するには、詳細を作成

class Item(models.Model): 
    closed = models.DateTimeField(blank=True, null=True) 
    closed_by = models.ForeignKey(User, blank=True, null=True) 

class Letter(models.Model): 
    item = models.ForeignKey(Item) 
    created = models.DateTimeField(default=datetime.now) 
    letter_name = models.CharField(max_length=40) 
    file_name = models.CharField(max_length=40, blank=True, null=True) 
    deleted = models.DateTimeField(blank=True, null=True) 
    deleted_by = models.ForeignKey(User, blank=True, null=True) 

    def lastVersion(self): 
    return self.letterversion_set.order_by('created').latest().created 

class LetterVersion(models.Model): 
    letter = models.ForeignKey(Letter) 
    created = models.DateTimeField(default=datetime.now) 
    created_by = models.ForeignKey(User) 
    text = models.TextField() 

    def letterItem(self): 
    return self.letter.item 

。最近編集した最後の3つのLetterLetterVersion.createで選択しようとしています。私は私のviews.pyに次のようにあります

lettersAll = Letter.objects.filter(item=i_iID,deleted__isnull=True).order_by('-letterversion__created')[:3] 

残念ながら、これが最後の3つのLetterVersion sが、彼らは同じLetterからであっても、自分の作成した日付/時刻にbasted私を取得します。

私が欲しい
letter 1 version 3 [1] 
letter 3 version 4 [2] 
letter 1 version 2 [3] 
letter 1 version 1 
letter 2 version 2 
letter 2 version 1 
letter 3 version 3 
letter 3 version 2 
letter 3 version 1 

letter 1 version 3 [1] 
letter 3 version 4 [2] 
letter 2 version 2 [3] 

は私が編集した最後の3つの文字のリストを取得することができますとにかくありますか?

+0

もしかしたら、この記事を見て、私が記述した何のため名前があるかどうか迷って他の人に指摘して、それはあなたが例を与えることができる 'Aggregation' – Sevenearths

答えて

1

Max()letterversion__createdと入力し、次にorder_by()とすることができます。

from django.db.models import Max 

lettersAll = Letter.objects.filter(
     item=i_iID, 
     deleted__isnull=True 
    ).annotate(
     last_created_version=Max('letterversion_created') 
    ).order_by('-last_created_version')[:3] 
+0

と呼ばれていますか? – Sevenearths

+0

ええ、1つを追加する過程にあった。 – Amber

+0

ありがとう、それはたくさん説明します。 'Max( 'letterversion_created')'が最新の/最大の日付を持つバージョンを見つけられないので、 'order_by( ' - last_created_version')'は 'order_by( 'last_created_version')'になります。または私は間違っていますか? – Sevenearths

関連する問題