[英]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.