'ManyRelatedManager' object is not iterable

时间:2023-03-09 08:47:13
'ManyRelatedManager' object is not iterable

先看下面的代码:

class Worker(models.Model):
    departments = moels.ManyToManyField(Department, verbose_name=u"部门列表", blank=True, related_name='workers')

class Department(models.Model):
    name = models.CharField(u"名字", max_length=255)
    wx_id = models.CharField(u"部门id", max_length=64, null=True, blank=True, db_index=True)

# 执行如下代码
worker = Worker.objects.get(pk=14)
worker.departments = models.Department.objects.filter(wx_id__in=info.get("department"))
for dept in worker.departments:
    print(dept.wx_id)

这个时候会报错'ManyRelatedManager' object is not iterable, 原因是worker.departments是不可迭代的,可以使用for dept in worker.departments.all()来迭代

更新ManyToManyField可以用add()方法,add()方法相当于update_or_create,不会重复增加