我有一个像这样的 Django 模型......
class Example(models.Model):
title = models.CharField(...)
...
Run Code Online (Sandbox Code Playgroud)
我正在尝试比较两个值 -title用户更改之前的字段和title之后的字段。我不想同时将两个值保存在数据库中(只需要一个title字段),因此我想使用pre_save和post_save方法来执行此操作。是否可以在保存之前获取标题,然后保存该值以传递给方法post_save?
pre_save 和 post_save 方法看起来像这样......
@receiver(pre_save, sender=Example, uid='...')
def compare_title_changes(sender, instance, **kwargs):
# get the current title name here
x = instance.title
@receiver(post_save, sender=Example, uid='...')
def compare_title_changes(sender, instance, **kwargs):
# get the new title name here and compare the difference
x = instance.title # <- new title
if x == old_title_name: # <- this is currently undefined, but should be retrieved from the pre_save method somehow
...do some logic here...
Run Code Online (Sandbox Code Playgroud)
任何想法将不胜感激!
编辑
正如我所指出的, pre_save 和 post_save 都发生在调用 save() 之后。我正在寻找类似 pre_save() 的东西,但在调用实际的保存方法之前。我在模型上设置了此选项,以便无论从何处保存实例(管理员或用户视图)都可以访问要执行的逻辑
用于Example.objects.get(pk=instance.id)在处理函数中从数据库获取旧标题pre_save:
@receiver(pre_save, sender=Example, uid='...')
def compare_title_changes(sender, instance, **kwargs):
new_title = instance.title # this is the updated value
old_title = Example.objects.get(pk=instance.id)
# Compare the old and new titles here ...
Run Code Online (Sandbox Code Playgroud)
这个技巧很久以前就在这里提出了。我还没有使用最新的 Django 版本对其进行测试。请让我知道它是否仍然有效。
| 归档时间: |
|
| 查看次数: |
3552 次 |
| 最近记录: |