我不确定用什么“正确”的方法来定义两个密切相关的、基于层次结构的对象之间的关系
我正在Django开发一种类似论坛的框架
我最初的想法是,既然一个线程基本上是一种“特殊”类型的Post,我应该创建一个功能齐全的Post模型,然后让一个线程模型继承它,并用线程可能需要的任何字段进行扩展。像这样:
class Post(models.Model):
forum = models.ForeignKey(Forum)
title = models.CharField(max_length=50, default="")
text = models.CharField(max_length=2000, default="")
created = models.DateTimeField(auto_now_add=True)
author = models.ForeignKey(User)
class Thread(Post):
thread_views = models.IntegerField()
reply_count = models.IntegerField()
(...)
我还想过用一个“isThread”布尔字段创建一个“Post”模型,但感觉有些不对劲
我在Django docs中看到了一个似乎非常相关的示例,但它确实说明对象存储在不同的表中,我不确定这是否是这种设计的最佳选择
从绩效和良好实践的角度来看,什么是“正确”的方法
这取决于你的定义
一个
Thread
和一个Post
的区别是什么?一个Thread
只是一个有回复的Post
?或者Post
必须属于Thread
对我来说,我会说一个
Post
可能是对另一个Post
的回复,所以可能需要一个可空的reply_to
FK('self')
字段这样,您就可以拥有一个带有许多回复的
Post
,从而创建一个线程,并且您可以允许回复回复(或者不回复,取决于您的用例)对于存储视图计数等,您可以以某种时间序列的方式存储它(这样您就可以知道一篇文章随着时间的推移有多受欢迎,而不是一个整数,并且可以执行简单的计数操作来获取总视图)
有很多方法可以做到
相关问题 更多 >
编程相关推荐