sql - Django:在创建最后一个帖子时检索事件线程

标签 sql django model relation

大家好,

我有两个模型,线程和帖子,其中一个线程可以有多个帖子。我想通过按“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)

最佳答案

只需在 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);

关于sql - Django:在创建最后一个帖子时检索事件线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/992885/

相关文章:

php - 增加值按钮 "mrk2"

python - Django-注册,自定义注册和验证

python - 如何防止 Django 登录页面记住凭据

sql - 错误: "coalesce" is not a known variable in INTO clause

mysql - 标准化日期(yy-mm-dd)还是坚持使用日期时间?

python - 需要的建议 : learning material for Django

python - 我该如何解决 KERAS 的问题

php - 使用 PDO 创建模型层

javascript - SAPUI5:如何以编程方式访问 ODataModel 数据?

mysql - mysql触发器怎么写