如何在Django中一次向ManyToMany关系添加多个对象?

时间:2011-02-10 16:04:03

标签: django list manytomanyfield

基于Django文档,我应该能够一次传递多个对象以添加到多人关系中但我得到了

  

* TypeError:不可用类型:'list'

当我尝试传递一个列表中的django查询集时。传递Queryset或ValuesListQueryset似乎也失败了。有没有比使用for循环更好的方法?

3 个答案:

答案 0 :(得分:258)

使用object.m2mfield.add(*items),如documentation

中所述

add()接受任意数量的参数,而不是它们的列表。

add(obj1, obj2, obj3, ...)

要将该列表扩展为参数,请使用*

add(*[obj1, obj2, obj3])

附录:

Django不会为每个项目调用obj.save(),而是使用bulk_create()

答案 1 :(得分:36)

要添加,如果要从查询集添加它们

实施例

runCG stoprule op rhs = do
  let steps = takeWhile (not . stoprule) $ cg op rhs
  foldM (\ _ (n, cgs) -> do
      putStrLn $ show n ++ "  " ++ show (sqrt $ cgr2 cgs)
      return $ cgx cgs)
    undefined -- initial value for fold is ignored as long as steps is nonempty
    (zip [(1::Int)..] steps)

来自:Insert queryset results into ManytoManyfield

答案 2 :(得分:24)

Django 1.9增加了添加多对多关系的其他方法。

文档:https://docs.djangoproject.com/en/1.9/ref/models/relations/#django.db.models.fields.related.RelatedManager.set

set是一个新的精品:

>>> new_list = [obj1, obj2, obj3]
>>> e.related_set.set(new_list)