gpt4 book ai didi

python - 使 Django 信号特定于管理员保存

转载 作者:太空宇宙 更新时间:2023-11-03 15:34:04 24 4
gpt4 key购买 nike

我目前正在开发 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)

我想做的是,让我当前的 save_post 函数仅在我点击 Django 管理员的“保存”按钮时运行。

我想避免覆盖保存功能,因为我读到不推荐这样做。

已解决:供将来引用,已接受答案建议的解决方案非常有效。我能够从 Django 管理仪表板中隔离保存实例。

最佳答案

我不确定,这是推荐的方法,但您可以做的是在 admin.py 中创建一个带有 save_model 函数的自定义 ModelAdmin

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)

然后我们可以检查 post_save 信号是否设置了 from_admin_site attr。如果已设置,则将从管理站点保存。

@receiver(post_save, sender=Event)
def save_post(sender, instance, **kwargs):
if getattr(instance, 'from_admin_site', False):
// Todo

关于python - 使 Django 信号特定于管理员保存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55979122/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com