簡體   English   中英

如何在 Django 中為帖子模型創建評論、贊、標簽、報告等?

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM