当前位置: 首页 > 面试题库 >

Django manytomany信号?

子车新立
2023-03-14
问题内容

假设我有这样的模型

class Event(models.Model)
    users_count = models.IntegerField(default=0)
    users = models.ManyToManyField(User)

如果事件添加/删除了一些用户,您如何建议更新users_count值?


问题答案:

如果可能的话,您可以引入Participation将Event和User连接起来的模型:

class Participation(models.Model):
    user = models.ForeignKey(User)
    event = models.ForeignKey(Event)

class Event(models.Model):
    users = models.ManyToManyField(User, through='Participation')

并处理发送的pre_save信号Participation以更新instance.event计数。这将大大简化m2m的处理。而且在大多数情况下,后来发现,某些逻辑和数据最适合中间模型。如果不是这种情况,请尝试使用自定义解决方案(您应该没有太多将用户添加到事件的代码路径)。



 类似资料:
  • #include <stdio.h> #include <signal.h> void handler(int sig); void handler(int sig) { signal(sig, handler); printf("Receive signal: %d\n", sig); } int main(void) { signal(SI

  • 信号是指示事件发生的进程的通知。 信号也被称为软件中断,不可预测知道它的发生,因此它也被称为异步事件。 信号可以用数字或名称来指定,通常信号名称以SIG开头。 可用的信号可以用命令(l列出信号名称)来检查,如下所示 - 无论何时发出信号(以编程方式或系统产生的信号),都会执行默认操作。 如果您不想执行默认操作但希望在接收信号时执行自己的操作。 可以处理信号,但不能处理所有的信号。 如果你想忽略信号

  • Django包含一个“信号的分发器”,允许解耦的应用在信号出现在框架的任何地方时,都能获得通知。简单来说,信号允许指定的 发送器通知一系列的接收器,一些操作已经发生了。当一些代码会相同事件感兴趣时,会十分有帮助。 Django 提供了一系列的内建信号,允许用户的代码获得DJango的特定操作的通知。这包含一些有用的通知: django.db.models.signals.pre_save & dj

  • 信号 我们知道信号是进程间通信的其中一种方法,当然也可以是内核给进程发送的消息,注意信号只是告诉进程发生了什么事件,而不会传递任何数据。 这是进程这个概念设计时就考虑到的了,因为我们希望控制进程,就像一个小孩我们想他按我们的想法做,前提就是他能够接受信号并且理解信号的含义。 信号种类 Linux中定义了很多信号,不同的Unix-like系统也不一样,我们可以通过下面的命令来查当前系统支持的种类。

  • 0.6 新版功能. 从 Flask 0.6 开始, Flask 集成了信号支持。这个支持由 blinker 库提供, 并且当它不可用时会优雅地退回。 什么是信号?信号通过发送发生在核心框架的其它地方或 Flask 扩展的动作 时的通知来帮助你解耦应用。简而言之,信号允许特定的发送端通知订阅者发 生了什么。 Flask 提供了几个信号,其它的扩展可能会提供更多。另外,请注意信号倾向于 通知订阅者,而

  • 给线程发送信号 给线程发送信号 源码/* * Copyright (c) 2006-2018, RT-Thread Development Team * * SPDX-License-Identifier: Apache-2.0 * * Change Logs: * Date Author Notes * 2018-08-24 yangjie the first version *//* * 程序

  • 信号接口 结构体 struct   siginfo_node   信号控制块 更多...   函数 rt_sighandler_t  rt_signal_install (int signo, rt_sighandler_t handler)   信号安装   void  rt_signal_mask (int signo)   信号阻塞   void  rt_signal_unmask (int

  • 阻塞信号是保持该信号并推迟发送,直到阻塞解除,但不会丢失。 结构体sigset_t(信号集合) 其中每一位对应系统支持的一种信号。结构体内部是数组。 函数 函数名 描述 [[sigemptyset sigempty]] 初始化信号集为空集 [[sigfillset sigfillset]] 初始化信号集包含全部信号 [[sigaddset sigaddset]] 向信号集中添加信号 [[sigde