【发布时间】:2014-07-01 00:28:26
【问题描述】:
问题
我正在为一个简单的论坛创建一个数据库模型。用户应该能够创建话题、添加帖子并在帖子中发布图片。
在一个视图中我想显示所有线程并且:
- 获取线程中第一个帖子的字段以显示帖子/创建日期等的一部分(包括可选图片)
- 获取线程中最后一个帖子的时间
- 统计线程中的帖子
- 计算线程中的图像数
我相信如果不对n 线程执行n 查询,这实际上是不可能的,所以真正的问题是如何重新设计数据库以使其成为可能。
class Thread(models.Model):
sticky = models.BooleanField()
...
class Post(models.Model):
thread = models.ForeignKey('Thread')
image = models.OneToOneField('Image', null=True, blank=True, default=None)
date = models.DateTimeField()
...
class Image(models.Model):
image = models.ImageField(...)
...
我的部分解决方案
此时我知道如何计算帖子和图像,但我不知道如何同时获取第一个帖子。我考虑在链接到第一个Post 的Thread 模型中添加额外的字段。
我的查询迫使我单独下载第一个帖子:
Thread.objects.annotate(
replies=Count('post'),
images=Count('post__image'),
last_reply=Max('post_date')
)
【问题讨论】:
-
在此处查看此答案stackoverflow.com/a/38131573/2863603,了解如何携带第一个相关项目
标签: python django django-models