Django Pymongo查询正常,但Mongoengine不查询任何内容
非常奇怪:Pymongo查询正常,但Mongoengine什么都不查询:Django Pymongo查询正常,但Mongoengine不查询任何内容,django,mongodb,pymongo,mongoengine,Django,Mongodb,Pymongo,Mongoengine,非常奇怪:Pymongo查询正常,但Mongoengine什么都不查询: class VkWallPostListView(ListView): model = VkWallPost context_object_name = "vk_list" def get_template_names(self): return ["blog/vk_list.html"] def get_queryset(self): wallposts
class VkWallPostListView(ListView):
model = VkWallPost
context_object_name = "vk_list"
def get_template_names(self):
return ["blog/vk_list.html"]
def get_queryset(self):
wallposts = VkWallPost.objects
if 'all_posts' not in self.request.GET:
#wallposts = wallposts.filter(text='S')
wallposts = VkWallPost._get_collection().find({"text":'S'})
tag = self.request.GET.get('tag', None)
if tag:
wallposts = wallposts.filter(tags=tag)
return wallposts
选项wallposts=VkWallPost.\u get\u collection().find({“text”:})
返回对象,但相同的Mongoenginewallposts=wallposts.filter(text='S')
不起作用-结果为空,没有错误!
更多:我有一个查询到另一个集合的类-Mongoengine正常工作。看起来您的VkWallPostListView没有直接从
Mongoengine.Document继承。我最近也遇到了这种情况,当数据库模式的同一模型从基本文档
类以外的其他对象继承时,在查询时它没有返回任何内容。事实证明,mongoengine在子类文档中添加了一个名为\u cls
的隐藏字段,并在查询时自动检查该字段
例如:
如果我有一个类文本持有者,它是我的类文章的基础
class TextHolder(mongoengine.Document):
text = mongoengine.StringField()
meta = { 'allow_inheritance' : True,
'abstract' : True }
class Post(TextHolder):
user = mongoengine.ReferenceField(User)
如果我试图按数据库中已经存在的帖子进行查询,那么他们的文档中将不会定义\u cls
字段。因此,查询不符合此标准的文档的方法就是这样做
Post.objects(user=user_to_query_by, class_check=False)
这将为我提供忽略\u cls
字段的所有对象,并且不检查是否与当前模型的类名匹配。如果VkWallPost是您的mongoengine模型,则可以使用VkWallPost.objects(text='s')来过滤我们的objects@Rajsubit-可能您错过了这一行wallposts=VkWallPost.objects-完全相同的已经完成我有相同的问题,并将meta={'allow_heritation':False}
添加到子类(您的Post
)中,之后一切都按预期工作(我不再需要指定class\u check=False
)。