我目前正在一个 Django 网站上工作。我想弄清楚如何制作仅当我从 Django Admin 保存时才激活的 post_save 信号。
现在,我已经做了一个 post_save 函数。这适用于所有意图和目的,但我的另一部分代码使用 .save() 更新主事件模型中的整数(整数表示提交的书籍数量)。
我更新用户加载事件页面时提交的书籍数量。
当用户尝试访问包含所有先前事件的页面时,这会导致加载时间过长,因为它会为页面上的每个项目运行我的“book_organizer”功能,而我只需要在我直接从管理页面更新和保存事件详细信息时运行它.
@receiver(post_save, sender=Event)
def save_post(sender, instance, **kwargs):
if instance.books_read==True:
book_organizer.organize_it(instance)
post_save.connect(save_post, sender=Event)
Run Code Online (Sandbox Code Playgroud)
我想做的是让我当前的 save_post 函数仅在我点击 Django 管理员的“保存”按钮时运行。
我想避免覆盖保存功能,因为我读到它是不推荐的。
已解决:供将来参考,已接受的答案所建议的解决方案非常有效。我能够从 Django 管理仪表板中隔离保存实例。
我不知道,这是推荐的方法,但你可以做的是创建一个自定义ModelAdmin与save_model函数admin.py
class FoobarModelAdmin(ModelAdmin):
def save_model(self, request, obj, form, change):
obj.from_admin_site = True #here we setting instance attribute which we check in `post_save`
super().save_model(request, obj, form, change)
admin.site.register(Foobar, FoobarModelAdmin)
Run Code Online (Sandbox Code Playgroud)
然后我们可以检查是否设置post_save了from_admin_siteattr 的信号。如果设置,则从管理站点保存。
@receiver(post_save, sender=Event)
def save_post(sender, instance, **kwargs):
if getattr(instance, 'from_admin_site', False):
// Todo
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1229 次 |
| 最近记录: |