Django:在post_save中添加多对多关系

时间:2018-01-12 13:20:18

标签: python django

我正在研究Django 2.0,并尝试创建一个具有自动选择加入功能的简单事件应用。即具有特定状态的Member会在Event创建时自动注册。

为此,我使用了Django的post_save信号来创建受影响的Member的查询集,并将它们添加到Event多个 - to-many字段participants

@receiver(signal=post_save, sender='events.Event')
def auto_opt_in(sender, instance, created, **kwargs):
    # Only applies to new Events that are opt-out
    if created and instance.is_opt_out:
            from database.models import Member

            # Build queryset of affected members
            members = Member.objects.none()
            for status in instance.opt_out_member_statuses:
                members = members.union(Member.objects.filter(member_status=status))

            # Add members to Event
            instance.participants.add(*members)
            instance.save()

我现在的问题是Members实际上并未添加到Event。如果我将print(instance.participants.all())放在最后一行之后,它会输出正确的结果。但是,更改似乎没有提交到数据库。我错过了什么?您是否被允许对实例进行更改?如果是这样,重点是什么?

由于

1 个答案:

答案 0 :(得分:1)

您需要执行以下操作:

from django.db import transaction

transaction.on_commit(lambda: instance.cou_group.add(instance.participants.add(*members))

为什么?我不确定