0

我正在用 Django 构建一个论坛风格的网站,并且在我的设计结构中遇到了一些问题。相关代码(来自我的模型)如下所示:

class Thread(models.Model):
    post_count = models.IntegerField()

class Post(models.Model):
    text = models.CharField(max_length=1000)
    thread = models.ForeignKey(Thread)

我遇到的问题是,在我的视图和模板中,我遍历线程并显示帖子。但是,我希望向我的模板传达帖子可能具有某些“特殊属性”(例如,主题发起人、最新帖子、最高得分帖子等)。对我来说,这些将是线程的属性而不是帖子本身似乎是合理的(因为每个线程都会有这些,但只有可变/可忽略的帖子数量)但是我已经设法解决了这个问题涉及将帖子双重链接到线程(通过 Post 定义中的另一个 ForeignKey(Thread))或通过在 Post 定义中放置 BooleanFields 以指示这些列表中的状态。我什至不确定这些在 Django 模板中是否有效或可见。

我的问题:在 Django 中是否有一种干净的方法来专门化或分组已经通过作为外键中的姐妹元素链接的模型实例,即,将 ForeignKey 子集为单独的(并且可能重叠)组?还是我以非pythonic/nondjango 的方式解决这个问题?我可能忽略的任何见解或文档链接将不胜感激。

4

1 回答 1

0

您可能需要在 Thread 中将某些属性添加为 ManyToManyField

class Thread(models.Model):
    post_count = models.IntegerField()
    post_latest = models.ManyToManyField(Post, related_name='as_latest', null=True, blank=True)

或者,我更喜欢使用 @property 来获取您需要的具有某些属性的数据:

class Thread(models.Model):
    post_count = models.IntegerField()

    @property
    def post_latest(self):
        return self.post_set.order_by('-id')[:10]
于 2013-05-24T07:13:41.620 回答