基于Django文档,我应该能够一次传递多个对象以添加到多人关系中但我得到了
* TypeError:不可用类型:'list'
当我尝试传递一个列表中的django查询集时。传递Queryset或ValuesListQueryset似乎也失败了。有没有比使用for循环更好的方法?
答案 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)
答案 2 :(得分:24)
Django 1.9增加了添加多对多关系的其他方法。
set
是一个新的精品:
>>> new_list = [obj1, obj2, obj3]
>>> e.related_set.set(new_list)