2016-06-28 10 views
2

私は、アイテム(チケット)の存在のインスタンスであるモデルを持っています。チケットを作成するたびに、別のモデルのインスタンス、レコードを作成します。各レコードは、誰がチケットを変更したのかを記録しており、チケットで何をしたのかは基本的には何が起こったのかを記録しています。私はチケットの作成者と作成日を作成者として定義し、それを指し示す最初のアクティビティの作成日を定義します。 (多くの1に関連して、多くの最初は関連オブジェクトの最初のインスタンスでオブジェクトをソートする

ようになり、私は非常に単純にこれを行い機能があります。並べ替えしようとしたとき、私はこれで問題が発生したが

def created_by(self): 
    records = Record.objects.filter(ticket=self.id).order_by('created_on') 
    return records[0].created_by 

をチケットの収集(論理的には作成日によってソートされることが最も多い).Djangoのフィルタを使って関数をソートすることはできません。

冗長なデータをデータベースに格納したくない私はむしろレコードを持っているので、チケットに関連するすべての日付アイテムがレコードに表示されます。アイデアはどのようにして並べ替えて検索できますか?このレコードの最初のインスタンス? (一部のユーザーは自分のチケットしか見ることができないため、一部を見ることができます、一部はサブセットを見ることができるので、作成者を検索する必要もあります)

ありがとう!レコードチケットフィールドを想定し

答えて

2

はチケットモデルへの外部キーである:

class Record (models.Model): 
    .... 
    create_time = models.DateTimeField() 
    ticket = models.ForeignKey(Ticket,related_name='records') 

あなたはチケットモデルのModelManager(オブジェクト)を交換してget_queryset関数をオーバーライドすることができます

class TicketManager(models.ModelManager): 
    def get_queryset(): 
     return super(TicketManager, self).get_queryset().annotate(create_time=Min('records__create_time')).order_by('create_time') 

class Ticket(models.Model): 
    ..... 
    objects = TicketManager 

Ticket.objects.all()やTicket.objects.filter(...)などのすべてのクエリは、作成時にソートされます

関連する問題