Django models 模型逻辑中的django模板

Django models 模型逻辑中的django模板,django-models,django-templates,Django Models,Django Templates,我希望生成与有限(>20,

我希望生成与有限(>20,<100)种类型相关联的自动消息:

class Message(models.Model):
    MSG_CHOICES = (
        ('MEETING', 'Meeting Reminder'),
        ('STATUS', 'Status Change Reminder'),
        ...
        )
    message = models.CharField(max_length=100)
    msg_type = models.CharField(max_length=10, choices=MSG_CHOICES)
每个消息的实际消息将取决于我必须在某个时候提供给它的类型和参数。例如,“会议”信息基本上是:

"Hi, you have a meeting at %s with %s." % (time, person_to_meet)
而“状态”消息类似于

"Hi, this is a reminder that you changed your %s status to %s." % (status_type, new_status)
现在,这里的复杂性在于我们必须为不同的类型呈现不同的消息。以下是我尝试头脑风暴的一些不同方法:

  • 修改模型,使每个模型都有一个基本消息模型和一个派生消息模型,并具有自己的构造函数类型,将“字符串模板”保存在每个模型的构造函数中。这符合用不同逻辑分离模型的模式(我通常对不同“类型”的模型这样做),但感觉很笨拙,因为除了创建消息的逻辑之外,这些家伙基本上是一样的。逻辑上的唯一区别来自于创建消息本身,仅仅因为它而拆分似乎是一种浪费
  • 保持模型不变,在代码中创建类方法,为每种类型创建工厂,将“字符串模板”保存在类中(甚至数据库中)。这是最简单的,但感觉脏
  • 这是创造性/疯狂的一个(因此标题):保持模型不变,并将字符串模板保存为实际模板文件。在构造函数中,使用Django模板库呈现这些文件并返回字符串。这看起来不错,因为它将硬编码数据从代码逻辑中分离出来,但感觉不太可靠,因为我在两个不同级别的代码中使用了模板(一个用于制作模型,一个用于视图)。这“感觉”不对,但我不能真正指出原因
  • 因此,主要问题是:

  • 针对这种情况的最佳做法是什么?这是其中之一还是其他方法
  • 有没有这种做法的“模型”例子?我觉得很多系统都会自动生成警报/消息,所以如果有特别好的代码,我想看看
  • 谢谢


    -Yan

    嗯,你根本不应该在数据库中存储消息。您正在存储msg_类型。这应该足够了。您(通过模板)向用户显示信息的逻辑应该能够处理这个问题。如果将来需要基于Accept Language标头对消息进行本地化,这将允许您对消息进行本地化。根据我的经验,在数据库中存储用户消息是个坏主意。而且,至少在我看来,这不是真正的商业逻辑。它似乎属于UI层。好啊只是我的意见。这个问题很老了。我很想知道你最终在这里做了什么

    IMHO,您根本不应该将消息存储在数据库中。您正在存储msg_类型。这应该足够了。您(通过模板)向用户显示信息的逻辑应该能够处理这个问题。如果将来需要基于Accept Language标头对消息进行本地化,这将允许您对消息进行本地化。根据我的经验,在数据库中存储用户消息是个坏主意。而且,至少在我看来,这不是真正的商业逻辑。它似乎属于UI层。好啊只是我的意见。这个问题很老了。我很想知道你最终在这里做了什么

    查看您的邮件示例似乎可以使用post_save方法来提高它。你怎么认为?。我的应用程序也会引发消息,而且我不知道在查看或保存后在哪里引发消息是最好的。我关注你的问题。如果问题只是在查看时执行或在保存后执行,我觉得保存后操作严格地优于视图,因为人类可读消息与用于生成消息的数据之间的关联是模型级逻辑,不应依赖于视图。你觉得怎么样?我在等一个人回答你的问题。在我看来:这是我第一次在post_save中编写这个规则,但很难检查消息应该提出的条件,然后我转到视图。现在我要回到post_save。我总是喜欢在模型上编写代码和业务规则。查看您的消息示例,post_save方法可能是一个很好的方法。你怎么认为?。我的应用程序也会引发消息,而且我不知道在查看或保存后在哪里引发消息是最好的。我关注你的问题。如果问题只是在查看时执行或在保存后执行,我觉得保存后操作严格地优于视图,因为人类可读消息与用于生成消息的数据之间的关联是模型级逻辑,不应依赖于视图。你觉得怎么样?我在等一个人回答你的问题。在我看来:这是我第一次在post_save中编写这个规则,但很难检查消息应该提出的条件,然后我转到视图。现在我要回到post_save。我总是在模型上编写代码和业务规则。