如何在Django中为帖子模型创建评论、点赞、标记、报告等



我创建了一个名为Post的模型,并将其放置在以下路径中:MyProject/Postapp/models看起来如下:

class Post(models.Model):
user = models.ForeignKey(User, related_name="posts",  
on_delete=models.CASCADE)
created_at = models.DateTimeField(auto_now=True)
message = models.TextField()
message_html = models.TextField(editable=False)
group = models.ForeignKey(Group, related_name="posts",null=True, 
blank=True,  on_delete=models.CASCADE)
def __str__(self):
return self.message
def save(self, *args, **kwargs):
self.message_html = misaka.html(self.message)
super().save(*args, **kwargs)
def get_absolute_url(self):
return reverse(
"posts:single",
kwargs={
"username": self.user.username,
"pk": self.pk
}
)
class Meta:
ordering = ["-created_at"]
unique_together = ["user", "message"]

因此,在下面,我想添加一条评论。。。用户创建的每个帖子。我应该启动一个新的应用程序(Commentapp,…(,还是在当前路径中创建模型并在Post模型中添加一些字段?

答案与任何语言中的任何"模块"(至少在任何有模块化概念的语言中(都是一样的:你想要强大的内聚性(模块的特性应该密切相关(和低耦合性(你的模块应该尽可能少的依赖性,特别是你不想要循环依赖性(。

在您的情况下,Comments显然与Posts密切相关,因此将它们保持在一起(强内聚(是完全合理的,而将它们拆分为不同的ap实际上会增加依赖关系(可能是循环依赖关系(,因此会增加耦合。

注意:除非你想要一个通用的comments应用程序,它当然可以与任何其他模型配合使用(在这种情况下,已经存在了一个(,但根据经验,我不会过早地进行概括——通常情况下,你最终不会将你的"通用"模型与其他任何东西结合使用,所以它给你带来的只是额外的复杂性(以及相当多的复杂性(,而没有真正的好处。仅仅是现有的contrib.comments应用程序最终从django主干中删除这一点,就足以表明这不是一个通用的可重复使用应用程序的好候选者(就我而言,我在一个项目中使用过一次,然后丢弃了它,并重新实现了我自己的模型,它以我需要的方式工作,代码更少,性能更好(。

最新更新