django - Django-reversion 外键数据“跟随”问题 - 创建对象时从历史记录中获取相关模型实例
问题描述
假设我有模型:
@reversion.register()
class EmailTemplate(models.Model):
html_content = models.TextField()
context_variables = models.JSONField()
@reversion.register(follow="template")
class EmailMessage(models.Model):
template = models.ForeignKey(EmailTemplate)
custom_data = models.JSONField()
案例一:(第一版模板)
电子邮件模板数据:
html_content = """ Hello {{ first_name }} """
context_variables = {'first_name': 'Enter name' }
电子邮件消息数据:
template = ForeignKey(EmailTemplate with id: 1))
custom_data = {'first_name': 'Robert' }
案例 2:(模板的第二个版本,添加了 last_name 字段)
电子邮件模板数据:
html_content = """ Hello {{ first_name }}, {{ last_name }} """
context_variables = {'first_name': 'Enter name', 'last_name': 'Enter your last name' }
电子邮件消息数据:
template = ForeignKey(EmailTemplate with id: 1))
custom_data = {'first_name': 'Robert', 'last_name': 'Doe' }
在从模板创建新电子邮件时,我会对其进行解析以制作额外的表单字段。它让我可以在EmailTemplate中声明此电子邮件模板和表单的字段。
我在管理员中创建 EmailTemplate,所以我可以看到所有历史版本。
问题是当我从我的已发送电子邮件列表中选择一封电子邮件以使用此指定模板版本(它可能来自过去)再次发送电子邮件时,因为模板可以稍后修改。
我知道我可以创建一个新模板,但是会有很多,我不会用我决定使用reversion 的原因来打扰你。我还想避免将大型 html 内容附加到保存到数据库中的 EmailMessage 实例。将有更多功能,例如查看此电子邮件的网络版本、取消订阅等。
我宁愿能够使用变量(custom_data)在 EmailMessage 中呈现模板(通过 ForeignKey“模板”属性),但它总是指向最新的模板版本。
是否可以在创建 EmailMessage 时以某种方式链接模板信息/数据?如果是,是否为每个新的 EmailMessage 实例复制/创建了模板数据(有 mroe 字段),或者它只是保存了修订 ID 并从 EmailTemplate 修订中获取?
使用最新的 django-reversion v. 3.0.9
谢谢
解决方案
推荐阅读
- javascript - 使用 craco 的 React-hot-loader
- c# - 具有多个连接操作的实体框架中的左连接
- php - 使用预先填充的表单更新数据库中的记录
- multiple-columns - GREL 中是否有一个函数可以根据 OpenRefine 中的标题一次删除许多列?
- c++ - 带有模板参数 enable_if 的 C++ 友元函数
- typescript - Firebase 使用 typescript 在函数构建器和句柄构建器中部署错误
- apple-watch - iOS WatchOS6“复杂服务器连接无效。”
- mysql - json 到 sql 查询转换器
- android - 如何从适配器获取位置并将其发送到活动
- c# - C# 卡夫卡消耗慢