有什么方法可以通过查询集更新ManyToMany字段吗?

时间:2019-09-19 19:09:49

标签: django django-models django-queryset

假设我有一个对象:

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

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

respondents = Respondent.objects.all()

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

其中eligible_forRespondent模型中的M2M字段。

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

models.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)

2 个答案:

答案 0 :(得分:2)

.add(..)可以容纳可变数量的物品,通常会批量添加。

因此,您可以使用以下命令添加所有r

survey.eligible_users.add(*respondents)

因此,我们在这里将respondents添加到相反的关系中。请注意,*前面的星号(respondents)将执行可重复拆包

答案 1 :(得分:1)

https://docs.djangoproject.com/en/2.2/ref/models/relations/

survey.eligible_users.set(respondents)是另一种无需拆列表的方法。