2013-06-25 75 views
0

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

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

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

,我检索对象与消息什么你的吗?上午3点00分。如何显示与创建时间相关的所有与此对象相关的消息?

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

我想你messagemessages。假设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) 

是你有的选择之一(你必须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) 
+0

完美谢谢 – JackRoster

+0

好,'auto_now_add'已被弃用,并且据我所知,不是最佳做法。对于默认的日期时间,你应该覆盖你的'save()'方法并设置它,或者使用'default = datetime.datetime.now'更改它的默认值。 –

+0

谢谢samuele – JackRoster