无法使用ID查询 - Django MongoDB引擎
我正在使用 django-nonrel
和 django-mongodb-engine
。
我有一个存储在 PostgreSQL 的 Django 模型:
class Author(models.Model):
name = models.CharField(max_length=100)
created = models.DateTimeField(auto_now_add=True)
我还有一个存储在 MongoDB 的模型:
class Post(models.Model):
title = models.CharField(max_length=100)
body = models.TextField()
created = models.DateTimeField(auto_now_add=True)
author = models.ForeignKey(Author)
每当我尝试通过作者 ID 来过滤帖子时:
posts = Post.objects.filter(author__id=1)
我就会遇到以下错误:
/usr/local/lib/python2.6/dist-packages/bson/objectid.pyc in __validate(self, oid)
158 raise InvalidId("%s is not a valid ObjectId" % oid)
159 else:
--> 160 raise InvalidId("%s is not a valid ObjectId" % oid)
161 else:
162 raise TypeError("id must be an instance of (str, ObjectId), "
InvalidId: 1 is not a valid ObjectId
In [22]: Post.objects.filter(author__id=1)
有什么想法吗?
3 个回答
-1
这两种数据库引擎是没法混合使用的。最简单的解释就是,MongoDB的主键是类似字符串的对象,而SQL的主键是整数。你不能同时使用这两种类型的主键,只能选择其中一种。
0
可能是:
author = Author.objects.get(pk=1)
posts = author.post_set.all()
2
我觉得“mongo方式”就是把作者的详细信息和所有评论都放在帖子里,使用嵌入文档。对于你这种情况,使用多个相关的集合(表)并不是解决问题的最好方法。
尽量减少外键的使用,直接把数据嵌入进去。我记得MongoEngine有一个Document和EmbeddedDocument的类,你可以从这两个类继承。
你为什么想用mongodb而不是mysql呢?你一定有一个超级大的博客... ;-)