我不确定定义两个密切相关的基于层次结构的对象之间关系的“正确”方法。
我正在Django开发一种类似论坛的框架。
我最初的想法是,由于Thread基本上是一种“特殊”类型的Post,我应该创建一个功能齐全的Post模型,然后让一个Thread模型从它继承,扩展为Thread可能的任何字段需要。像这样:
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中看到了一个看似非常相关的例子,但它确实说对象存储在不同的表中,我不确定这是否是这种设计的最佳选择
这样做的“正确”方法是什么,性能明智和良好做法明智?
答案 0 :(得分:0)
这取决于您的定义。
Thread
和Post
之间的区别是Thread
只有Post
的回复?或者Post
是否必须属于Thread
?
对我而言,我会说Post
可以回复另一个Post
,因此可能需要一个可以为reply_to
FK('self')
字段的空白。
通过这种方式,您可以拥有一个包含许多回复的Post
,从而创建一个帖子,您可以允许回复回复(或不回复,具体取决于您的使用案例)。
为了存储视图计数等,你可以用某种时间序列方式存储它(这样你就可以知道帖子随着时间的推移有多受欢迎,而不是一个整数,以及能够做到例如,获取总视图的简单计数操作)
class PostActions:
post (link to Post)
action ('view', 'like', 'click' etc)
timestamp (auto_now)
有很多方法可以做到!