Django:在创建最后一个帖子时检索活动线程

Posted

技术标签:

【中文标题】Django:在创建最后一个帖子时检索活动线程【英文标题】:Django: Retrieve active threads by the time the last Post was created 【发布时间】:2010-11-02 20:02:01 【问题描述】:

大家好,

我有两个模型,线程和帖子,其中一个线程可以有多个帖子。我想通过按“post_set.createtime”排序来检索活动线程。最后,我想准确地获得 10 个最近活动的线程。这可能不使用自己的 SQL 吗?

非常感谢。

[从 OP 对问题正文的回复中复制模型定义。]

class Topic(models.Model):
    title = models.CharField(max_length=50)
    order = models.SmallIntegerField() #used for visual stuff

class Thread(models.Model):
    topic = models.ForeignKey(Topic)
    name = models.CharField(max_length=50)

class Post(Meta):
    thread = models.ForeignKey(Thread)
    text = models.TextField()

class Meta(models.Model):
    createuser = models.ForeignKey(User,default=None,blank=True,null=True,related_name="createuser")
    createtime = models.DateTimeField(default=datetime.datetime.now,blank=True,null=True)
    edituser = models.ForeignKey(User,default=None,null=True,related_name="edituser",blank=True)
    edittime = models.DateTimeField(default=None,null=True,blank=True)

【问题讨论】:

如果您能发布所涉及的两个模型的相关 sn-ps,将会有所帮助。 【参考方案1】:

只需在 Thread 中添加字段 'last_post_datetime' 并在 Post.save 中更新此字段:

class Thread(models.Model)
    ...
    last_post_datetime = models.DateTimeField(blank=True,null=True) 

class Post(Meta):
    ...
    def save(self):
        super(Post, self).save()
        self.thread.last_post_datetime = max(self.thread.last_post_datetime, self.createtime)
        self.thread.save()

并使用简单查询

Thread.objects.order_by('-createtime')[:10]

当然我建议你在这个字段上添加索引:

ALTER TABLE <post> ADD INDEX createtime (createtime);

【讨论】:

【参考方案2】:

可能有一种更简单的方法 :) 使用“date_posted”字段或类似的内容将 DateTimeField 添加到 Post 对象。然后这样做:

Thread.objects.order_by('-post_set__date_posted')[:10]

这基本上是 Glader 答案的一个变体,但我更喜欢这个,因为如果您在 DateTimeField 上将 auto_now_add 设置为 True,它不需要自定义 save() 方法。我更喜欢将模型的逻辑尽可能多地保留在模型本身中。

【讨论】:

以上是关于Django:在创建最后一个帖子时检索活动线程的主要内容,如果未能解决你的问题,请参考以下文章

在创建弹簧批处理bean时获取“范围'步骤'对于当前线程不活动”

线程只能在 Django Channels 中启动一次

完成活动是不是会破坏从活动创建的线程?

在 onStop() 之后,带有线程的 Android 活动被破坏

Django聚合,计数总和

Django 与字段和多线程的独特关系