Django manytomany信号?

Pyd*_* UA 5 python django django-signals django-models

假设我有这样的模型

class Event(models.Model)
    users_count = models.IntegerField(default=0)
    users = models.ManyToManyField(User)
Run Code Online (Sandbox Code Playgroud)

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

kib*_*zer 8

如果可能,在您的情况下,您可以引入Participation将加入事件和用户的模型:

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

class Event(models.Model):
    users = models.ManyToManyField(User, through='Participation')
Run Code Online (Sandbox Code Playgroud)

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