当您将pk整数列表传入add或remove时 - 是否访问了对象?即。是否有每个PK的数据库调用?Django manytomany添加或删除
1
A
回答
2
当您创建ManyToManyField
而未指定中间表时(使用through
)Django会为您生成一个表。这个表格只需要两个模型的pks,所以不需要从其他对象中选择任何东西来保存新的关联关系。
将为它们中的每一个创建一个新行,可能使用许多插入,但不一定需要很多数据库调用(例如,可能有多个插入命令的单个SQL查询)。这些创建(对象的pks)所需的所有信息都可用,因此不需要任何更多的数据库命中。
更新:似乎我错了。纵观源(Django的/ DB /模型/场/ related.py),我看到它执行对每个对象的独立创作:在做之前是
for obj_id in new_ids:
self.through._default_manager.using(db).create(**{
'%s_id' % source_field_name: self._pk_val,
'%s_id' % target_field_name: obj_id,
})
,它还会检查是否有任何PKS供应在数据库中已经存在(为了避免重复的条目/唯一约束违规):使用
vals = self.through._default_manager.using(db).values_list(target_field_name, flat=True)
vals = vals.filter(**{
source_field_name: self._pk_val,
'%s__in' % target_field_name: new_ids,
})
new_ids = new_ids - set(vals)
该检查虽然有一个查询做...
0
你有没有试过检查自己QuerySet.query属性?
相关问题
- 1. 在Django中添加ManyToMany
- 2. Django从ManyToMany关系中删除对象
- 3. Django - ManyToMany中的对称ForeignKeys或级联删除?
- 4. NSMutableArray添加或删除
- 5. iAds:删除或添加?
- 6. 休眠ManyToMany删除
- 7. Javascript添加/删除表单在Django formset
- 8. 删除Django中的“添加”功能admin
- 9. 休眠@ManyToMany删除关系
- 10. Symfony Doctrine:删除ManyToMany关联
- 11. jpa删除manytomany链接
- 12. JPA Unidirectional ManyToMany无法删除
- 13. Django ManyToMany加入查询
- 14. Django:过滤ManyToMany加入
- 15. 添加或删除ng控制器
- 16. jQuery添加/删除类或切换类
- 17. jQuery切换添加或删除类
- 18. 不能删除或者添加主键
- 19. 防止或删除传单效果添加/删除图层
- 20. 从“添加或删除规则集”中删除规则集
- 21. 如何在Django Rest Framework中从ManyToMany关系中删除对象
- 22. 如何删除Django中ManyToMany字段的一个实例
- 23. 添加/删除.append
- 24. 如何将queryset添加到ManyToMany关系?
- 25. django模型设计 - ManyToMany或ForeignKey
- 26. Django ManyToMany字段
- 27. django manytomany和modelform
- 28. django manytomany验证
- 29. 再次添加,删除和添加元素删除其事件
- 30. Eclipselink 2.5.1-RC1 JPA 3-Way ManyToMany:自动添加/删除联结表记录
'add'和'remove'没有查询属性来检查,但也有类似的方法。执行'from django.db import connection',然后在添加或删除多对多关系之前和之后打印'connection.queries'。 – Alasdair 2012-02-19 16:12:55
谢谢,不知道。 – side2k 2012-02-20 04:03:31