我正在研究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())
放在最后一行之后,它会输出正确的结果。但是,更改似乎没有提交到数据库。我错过了什么?您是否被允许对实例进行更改?如果是这样,重点是什么?
由于
答案 0 :(得分:1)
您需要执行以下操作:
from django.db import transaction
transaction.on_commit(lambda: instance.cou_group.add(instance.participants.add(*members))
为什么?我不确定