代码之家  ›  专栏  ›  技术社区  ›  Adam Starrh

将一个对象添加到批量事务中多个对象的M2M字段中

  •  0
  • Adam Starrh  · 技术社区  · 7 年前

    post_save 信号。

    @receiver(post_save, sender=Questionnaire)
    def add_new_eligible_users_to_questionnaire(sender, instance, created, **kwargs):
        if created:
            if instance.open_to_all:
                users = Respondent.objects.filter(organization=instance.organization)
                users.update(eligible_for=instance)
    

    这个想法是,一旦调查被创建,如果它是开放给所有人,它将自动添加到他们的网站 eligible_for

    不幸的是, update() 不适用于M2M关系。有没有办法让我一下子做到这一点?

    1 回复  |  直到 7 年前
        1
  •  0
  •   Adam Starrh    7 年前

    给定以下模型:

    class Respondent(models.Model):
        user = models.OneToOneField('Home.ListenUser', on_delete=models.CASCADE)
        eligible_for = models.ManyToManyField('Questionnaire', related_name='eligible_users', null=True)
    

    我用这个来完成它:

    @receiver(post_save, sender=Questionnaire)
    def add_new_eligible_users_to_questionnaire(sender, instance, created, **kwargs):
        if created:
            if instance.open_to_all:
                users = Respondent.objects.filter(organization=instance.organization)
                instance.eligible_users.set(users)