Python 无法使用IDs进行查询-Django MongoDB引擎

Python 无法使用IDs进行查询-Django MongoDB引擎,python,django,mongodb,django-nonrel,Python,Django,Mongodb,Django Nonrel,我正在使用django nonrel和django mongodb引擎 我有一个Django模型存储在PostgreSQL上: class Author(models.Model): name = models.CharField(max_length=100) created = models.DateTimeField(auto_now_add=True) 我有一个MongoDB存储模型: class Post(models.Model): title = mode

我正在使用
django nonrel
django mongodb引擎

我有一个Django模型存储在PostgreSQL上:

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)

有什么想法吗?

我相信“mongo方式”是将作者的详细信息以及所有评论嵌入到嵌入的文档中。在您的案例中,拥有多个相关集合(表)并不是解决此问题的最佳方法

尽可能减少foreignKey的使用,只需嵌入数据即可。我相信MongoEngine有一个Document和EmbeddedDocument类,您可以从中继承

为什么要使用mongodb和mysql?你一定有一个很大的博客…;-)

可能是:

author = Author.objects.get(pk=1)
posts = author.post_set.all()

这两台发动机不可能混合使用。对此最简单的解释是MongoDB主键是类似字符串的对象,*SQL PK是整数。您不能同时使用这两个,请选择一个。

很公平,我现在将外键改为简单整数。博客不是最终的应用程序(很遗憾:)