1

在这种情况下,我有 2 个或更多模型:

class Store(models.Model):
    name = models.CharField(max_length = 100)
    homepage = models.URLField(verify_exists = False)
    ....

class Product(models.Model):
    display = models.BooleanField(default = True)
    created = models.DateTimeField(auto_now_add = True)
    changed = models.DateTimeField(auto_now_add = True, auto_now = True)
    ....

这些都需要不同的评论模型/形式。例如:

  • 产品评论 我想要一些额外的信息,如产品评级、优点、缺点等。
  • 但对于商店来说,我希望有一些字段,如评价客户支持、评价沟通/响应、如果运费合理则布尔值等。

这两个模型都是 contrib Comments 模型的子类,因此它与现有的 admin 和 comments 模板标签兼容。

然而,Django 的内置注释设置似乎相当严格,只允许使用get_model() 和 get_form()方法自定义一个模型/表单。

我使用不同的方法在这两种情况下都能正常工作,但它涉及大量代码重复,如果我要添加第 3 或第 4 类型的注释子类,这是相当不切实际的。

有谁知道这样做的更好方法?我试过搜索 StackOverflow,但似乎没有结果类似于这个用例。

4

1 回答 1

1

我最终实现了一个位于当前 Django 贡献评论模块之上的额外模型。

评论系统现在更加灵活,允许各种新功能,例如:

  • 首先,允许您将各种评论模型与特定目标模型相关联
  • 将您的评论模型直接链接到 ORM 中的目标模型,而无需像 contrib 评论模块中那样进行任何黑客攻击
  • 允许在表单中进行自定义验证,如果字段无效,则不会引发 500
  • 在当前页面显示评论预览,无需将用户重定向到空白页面
  • 在不使用信号的情况下更容易实现发布前评论事件
  • 挂钩到 contrib 评论系统,使其与现有的数据库/插件/模板标签/模板过滤器兼容
  • 保持对评论“comment_was_posted”信号的支持
  • 易于主题化。模型名称包含在表单类名称中,因此您可以为每个表单指定样式。
  • 易于覆盖模板(见下文)

如果你有兴趣帮助开发和/或测试,这个模块可以在github上找到。

它与 contrib 评论系统兼容,因此许多现有标签仍然有效,您不必重做所有现有模板。请参阅文档以获取更多信息。

于 2012-04-07T09:42:44.837 回答