Django和MongoDB与Django管理员有关

时间:2013-03-22 22:58:16

标签: django mongodb django-admin django-nonrel

我正在尝试将MongoDB与Django的管理系统(as per the Tumblelog tutorial on the mongodb site集成在一起,并在尝试python manage.py syncdb时遇到错误 - 它给了我这个错误 - 而且我不完全确定该做什么关于它。谢谢!

pymongo.errors.OperationFailure: command SON([('create', u'auth_permission'), ('max', False), ('capped', False), ('size', 0.0)]) failed: exception: create collection invalid size spec

```

3 个答案:

答案 0 :(得分:1)

似乎权限应用存在问题,请尝试向djangotoolbox添加settings.py

NoSQL的性质与django ORM不兼容authpermission个应用程序,它们依赖于JOINS一起工作。

无论如何,你见过django-nonrel吗? django-nonrel为MongoDB和其他NoSQL数据存储提供了更多的应用程序和解决方案。

答案 1 :(得分:1)

请参阅此链接:https://github.com/django-nonrel/mongodb-engine/pull/134

主要问题是对于具有无上限大小的集合,请设置较大的上限大小,以便后续命令不会失败。

我假设你在使用django-nonrel 1.3.1。我从django-nonrel / mongodb-engine中分离出来并在https://github.com/statguyjames/mongodb-engine.git@master中修复。

答案 2 :(得分:0)

首先,我通过完全替换sql_create_model()方法尝试了statguy的解决方案 - 但它不起作用,一些错误不断出现。

然后我做的是我添加了

size = getattr(model._meta, 'collection_size', None)
if size is not None:
    kwargs['size'] = size
else:
    kwargs['size'] = 10000000000

之后

for option, mongo_option in [
        ('capped', 'capped'),
        ('collection_size', 'size'),
        ('collection_max', 'max')
    ]:
        kwargs[mongo_option] = getattr(model._meta, option, False)

来自django_mongodb_engine的文件creation.py。

这种错误不再出现了。但是,由于这个巨大的价值,mongo将在磁盘上分配一些文件,这些文件基本上将我当前的数据库从几MB变为大约17GB - 以错误分配新文件。

如此谨慎地执行一个值。不过,我可能会遗漏一些东西。