在Django的ManyToMany关系中按id添加对象

pin*_*och 17 python sql django many-to-many

Django的ManyToMany字段可以使用填充my_field.add(my_instance),但据我所知,my_instance.id实际上只需要执行相应的SQL查询.

如果我想通过其id添加对象,我可以使用my_field.add(MyModel.objects.get(id=id)),但这将生成两个查询而不是一个.我怎样才能避免这个额外的查询?

pin*_*och 23

虽然add方法的文档没有提及它,但您实际上可以直接将id传递给它,如下所示:

my_instance.add(id)

当然,这仅在主键用作关系的标识符(默认行为)时才有效.

  • 直接传递id导致我的TypeError(Django 1.10.5):"TypeError:'MyRelatedModel'实例预期,获得'5835da11-dcde-47da-9664-e5c13e235ccc'" (3认同)
  • 所以,我不太正确......你需要确保 pk 与预期的类型相同,否则你会得到 `IntegrityError`。例如,如果执行 `.add('3')` 并且 id 应该是整数,如果关系已经存在,您将收到错误。如果你执行 `.add(3)` 那么它将忽略重复项。 (2认同)