通过django rest框架对django对象进行部分更新时,是否可以触发信号?

傻胖猫

我开始注意到patchdjango rest框架中方法实际上并未触发信号,post方法似乎可以正常工作。这就是我所拥有的:

@receiver(signals.pre_save, sender=Example)
def populate_time_fields_based_on_state(sender, **kwargs):
    example = kwargs.get('instance')
    if example.start_datetime is None and example.projected_end_datetime is None and example.state.label == 'Assigned':
        example.start_datetime = datetime.datetime.now()
        example.projected_end_datetime = example.created_datetime + datetime.timedelta(
            days=example.som_field)
        example.save()

我正在通过以下方式对此进行测试:

client = APIClient()
client.patch(f'/api/example/1/', {'state': 'Assigned'})

有没有办法告诉它触发信号?我需要在序列化程序中覆盖update方法吗?我正在尝试:

def partial_update(self, request, *args, **kwargs):
    response = super().partial_update(request, *args, **kwargs)
    instance = self.get_object()
    instance.save()
    return response

但这很hacky

安德鲁·贝克

在您的应用目录中,应该有一个apps.py有关格式请参阅文档

通常,最终结果如下图所示,而不是他们手动连接信号的示例。请注意,我在这里具有“ project / apps /”结构,但是只需根据文件实际所在的位置更改模块名称即可:

#project/apps/my_app/__init__.py
default_app_config = 'project.apps.my_app.apps.MyAppConfig'

#project/apps/my_app/apps.py
from django.apps import AppConfig

class MyAppConfig(AppConfig):
    name = "project.apps.my_app"
    verbose_name = "MyApp"

    def ready(self):
        from project.apps.my_app import signals
        # ... other init &/or logging

注意:请随意删除init .py中的行,并name在应用程序配置中使用。我不确定他们到底有多重要

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

我可以在Django中手动触发信号吗?

来自分类Dev

QAction触发信号未通过检查的参数

来自分类Dev

QAction触发信号未通过检查的参数

来自分类Dev

是否可以在 Django 中进行部分模板渲染?

来自分类Dev

在通过异常发信号通知“无效输入”时,是否存在事实上的标准异常或最佳实践方法?

来自分类Dev

通过 Django rest 框架登录用户

来自分类Dev

通过Django中的模型

来自分类Dev

django 多对多通过

来自分类Dev

通过ManyToManyField Django过滤对象

来自分类Dev

Django Rest通过id更新了许多

来自分类Dev

通过外键进行 Django 级联更新

来自分类Dev

如何通过模型的方法django更新对象

来自分类Dev

可以通过最近更新的对象查询django ORM吗?

来自分类Dev

Django通过信号使模板缓存无效

来自分类Dev

Django通过信号使模板缓存无效

来自分类Dev

Django:通过Ajax设置会话

来自分类Dev

Django通过的平均分数

来自分类Dev

通过github为django贡献

来自分类Dev

Django通过CheckboxSelectMultiple渲染数字

来自分类Dev

通过slug过滤Django queryset

来自分类Dev

Django通过外键过滤

来自分类Dev

Django通过URL传递kwargs

来自分类Dev

Django通过变量更改字段

来自分类Dev

无法通过Django连接mysql

来自分类Dev

通过HTTPS服务Django站点

来自分类Dev

Django rest框架:通过额外的参数覆盖ModelSerializer中的create()

来自分类Dev

django rest框架通过OneToOneField的lookup_field

来自分类Dev

通过REST API与Django交流与salesforce

来自分类Dev

通过REST API与Django与Salesforce对话