最近在某个 Django 的 app 中看到这样的一段代码:
possible_duplicates = self.get_comment_model()._default_manager.using(
self.target_object._state.db
).filter(
content_type=new.content_type,
object_pk=new.object_pk,
user_name=new.user_name,
user_email=new.user_email,
user_url=new.user_url,
)
其中有几个用法不知道其作用:
首先我们得到了一个 Model 类,其 _default_manager 是什么?从其后面的方法来看应该是一个 Manager 的实例,但是这个 manager 指的是什么?如果我在 model 中自定义了一个 manager,比如 objects = MyManager()
,那么这个 _default_manager 指向的是这个自定义的 manager 还是 django 默认的 Manager()?
_state.db 指的是什么?一个 model 实例的 _state 是什么? .db 又是什么?有什么作用?
为什么要这么写,有什么好处?不能直接写成 self.get_comment_model().objects.filter()么?
看了看 model 相关的源码,云里雾里的,求大家指点!
_default_manager représente le manager par défaut du Modèle. Si vous définissez votre propre manager, le premier manager sera considéré comme le manager par défaut.
Vous pouvez vous référer à la documentation de Djangohttps://docs.djangoproject.com/en/1.9/topics/db/managers/。
Vous devez publier ces deux morceaux de code, self.get_comment_model() et self.target_object ensemble, sinon les réponses des autres en devinant pourraient ne pas être la réponse que vous souhaitez
Merci, une partie de la solution est résolue, .using(
La partieindique l'utilisation de la table de la base de données où se trouve l'objet_cible (instance de modèle) pour les requêtes, ce qui répond principalement aux besoins cross-site.
Il y a aussi ce que _default_manager représente qui n'a pas été résolu.