0

Message というモデルがあり、これには in_response_to というフィールドがあります。このフィールドを使用して、元のメッセージの主キーを関連する各メッセージ内に保存することで、どのメッセージが互いに関連しているかを識別し、すべてのメッセージを作成時間別に一覧表示します。

たとえば、4つのメッセージを作成し、それぞれの時間が互いに関連しており、作成された時間を示しています

Hello   1.00am 
My name is richard 2.00am 
What yours? 3.00am 
Kangarro 4.00am 

そして、 What yours?というメッセージでオブジェクトを取得します 。午前3時。このオブジェクトに関連するすべてのメッセージを作成時刻より前に表示するにはどうすればよいですか?

class Message(models.Model):
    user = models.ForeignKey(User, related_name='sender')
    recipient = models.ForeignKey(User, related_name='recipient')
    created = models.DateTimeField(auto_now_add=True)
    in_response_to = models.ForeignKey('self', null=True, blank=True)


    def __unicode__(self):
        return self.body

ビュー

messages = Message.objects.get(pk=id,recipient=request.user.id)
message = Message.objects.filter(in_response_to=messages.in_response_to )
4

1 に答える 1

1

messagesで反転したと思いますmessage。が単一のオブジェクトであると仮定するmessageと、次のようにメッセージをフィルタリングします。

messages = Message.objects.filter(in_response_to=message.in_response_to).filter(created__lt=message.created)

より多くの比較例については、ドキュメントを確認してください(lteつまり、、などless than or equalを使用できます) 。ltgtgte

事についてDateTime:

created = models.DateTimeField(default=datetime.datetime.now)

あなたが持っているオプションの1つです(あなたがしなければなりませんimport datetime)。もう 1 つは、モデルの save メソッドをオーバーライドしています。

class Message(models.Model):

    # other fields omitted to keep it clean
    created = models.DateTimeField(blank=True, null=True)        

    def save(self, *args, **kwargs):
        if not self.created:
            self.created = datetime.datetime.now()
        return super(Message, self).save(*args, **kwargs)
于 2013-06-25T08:59:59.853 に答える