[英]How to create comment, like, tag, report, and so on for a post model in 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
应用程序(当然,在这种情况下已经存在 ),但是根据经验,我不会陷入这种过早的概括中-大多数情况下,您最终会不使用您的“通用”模型以及其他任何东西,因此它所带给您的只是额外的复杂性(其中相当一部分),而没有真正的好处。 仅从Django主干中删除现有的contrib.comments
应用程序这一点就足以说明这不是通用可重用应用程序的理想选择(就我所担心的,我曾在项目中使用过一次,然后将其转储并重新实现我自己的模型,该模型以所需的方式以更少的代码和更好的性能工作了。
class Comment(models.Model):
post = models.ForeignKey('blog.Post', on_delete=models.CASCADE, related_name='comments')
author = models.CharField(max_length=200)
text = models.TextField()
created_date = models.DateTimeField(default=timezone.now)
approved_comment = models.BooleanField(default=False)
def approve(self):
self.approved_comment = True
self.save()
def __str__(self):
return self.text
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.