Django过滤时间

时间:2013-06-25 08:55:08

标签: django

我有一个名为Message的模型,它有一个名为in_response_to的字段。我使用此字段通过在每条相关消息中存储原始消息的主键来识别哪些消息彼此相关,并且我通过创建的时间列出所有消息。

例如,我创建了4条消息,每个时间彼此相关并显示创建的时间

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

我使用消息你的内容检索对象?凌晨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 )

1 个答案:

答案 0 :(得分:1)

我认为您将messagesmessage对齐。假设message是您的单个对象,我们将过滤消息:

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

查看docs以获取更多比较示例(lte表示less than or equal但您可以使用ltgtgte等等)

关于DateTime事:

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

是您拥有的选项之一(您必须import datetime)。另一个是覆盖模型的保存方法:

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)