首页 > 解决方案 > 有什么方法可以通过查询集更新 ManyToMany 字段?

问题描述

假设我有一个对象:

survey = Survey.objects.all().first()

我想在它和一组对象之间建立关系:

respondents = Respondent.objects.all()

for r in respondents:
    r.eligible_for.add(survey)

其中eligible_forRespondent模型中的 M2M 字段。

有什么方法可以一次性完成,还是我需要遍历查询集?

模型.py

class Questionnaire(models.Model):
    label = models.CharField(max_length=48)
    organization = models.ForeignKey('Home.Organization', on_delete=models.PROTECT, null=True)

class Respondent(models.Model):
    user = models.OneToOneField('Home.ListenUser', on_delete=models.CASCADE)
    organization = models.ForeignKey('Home.Organization', on_delete=models.PROTECT)
    eligible_for = models.ManyToManyField('Questionnaire', related_name='eligible_users', blank=True)

标签: djangodjango-modelsdjango-queryset

解决方案


.add(..)可以携带不定数量的物品,通常会批量添加。

因此,您可以将所有rs 添加到:

survey.eligible_users.add(*respondents)

因此,我们在这里将respondents反向添加到关系中。注意*前面的星号 ()respondents将因此执行可迭代解包


推荐阅读