在模型上使用ManyToManyField的错误数据库查询

时间:2015-07-02 11:50:06

标签: django mongodb

我是django网站开发的新手。我收到一个错误,我试图改变一个帖子'在管理员网址下 - 所以localhost:8080 / admin。我能够成功创建它,但是当我尝试点击我刚刚添加的帖子时。我收到此错误:

  

异常类型:DatabaseError异常值:此查询不是   由数据库支持。

这就是我所知道的代码'搞乱'使用此查询:

#Post is an abstract class
class BlogPost(Post):
      ...
      translators = models.ManyToManyField(Staff, related_name='translators')
      photographers = models.ManyToManyField(Staff, related_name='photographers')  
      authors = models.ManyToManyField(Staff, related_name='authors')
      ...

要解释此博客帖子的内容 - 它可以让多个“所有者”/人员参与此帖子,从而决定使用ManyToManyField。反之亦然的是'员工'会员 - '会员的类型'可以在多个帖子上拥有多个所有权(让我知道这个逻辑是否有任何意义,因为它对我有用)。

我使用mongodb作为数据库,django 1.5.11并且我安装了djangotoolbox。我已经尝试了以下解决方案,并添加了与BlogPost的关系,如下所示:

Class Staff(Member):
    ...
    staff_posts = models.ManyToManyField(BlogPost, related_name="staff_posts")
    ...

但是我发现错误导致无法导入BlogPost'。我试着弄清楚这个错误的原因,我不认为我有循环依赖 - 在检查完所有文件后,没有循环依赖。

2 个答案:

答案 0 :(得分:0)

只是把它放在那里,我并不熟悉MongoDB。

但是,我不相信您需要在Staff类中定义ManyToManyField。您已经在BlogPost中定义了ManyToMany,只需在一个类文件中定义它即可。 (至少对MySQL而言)。

答案 1 :(得分:0)

MongoDB(或我猜你正在使用的mongoengine)不支持连接,因此在关系数据库中建模多对多关系的典型方法必须以其他方式实现。

一种方法是在ReferenceField内使用ListField。它可能看起来像这样(未经测试):

class BlogPost(Post):
    authors = models.ListField(models.ReferenceField(Staff))
    ...

另见这些答案: