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

Ada*_*rrh 5 django django-models django-queryset

假设我有一个对象:

survey = Survey.objects.all().first()
Run Code Online (Sandbox Code Playgroud)

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

respondents = Respondent.objects.all()

for r in respondents:
    r.eligible_for.add(survey)
Run Code Online (Sandbox Code Playgroud)

其中eligible_for是模型中的 M2M 字段Respondent

有没有办法一次性完成它,或者我是否需要循环查询集?

模型.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)
Run Code Online (Sandbox Code Playgroud)

Wil*_*sem 6

.add(\xe2\x80\xa6)\xc2\xa0 [Django 文档]可以获取可变数量的项目,并且通常会批量添加这些项目。

\n

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

\n
survey.eligible_users.add(*respondents)
Run Code Online (Sandbox Code Playgroud)\n

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

\n


han*_*cho 2

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

survey.eligible_users.set(respondents)是另一种无需解压列表即可完成此操作的方法。