【问题标题】:Django MongoDB Engine error when running tellsiteid运行tellsiteid时出现Django MongoDB引擎错误
【发布时间】:2012-02-07 19:40:33
【问题描述】:

所以我按照教程创建了一个 django 项目和应用程序,并且我拥有 MongoDB 引擎所需的所有依赖项,在我尝试启用管理界面之前,一切似乎都工作得很好。

我取消了对必需位的注释,并将“django_mongodb_engine”和“djangotoolbox”添加到 settings.py 中的应用程序部分

当我尝试进入 localhost:8000/admin 时出现错误:

“AutoField(默认主键)值必须是表示 MongoDB 上的 ObjectId 的字符串(取而代之的是 u'1')。请确保您的 SITE_ID 包含有效的 ObjectId 字符串。”

经过一番谷歌搜索后,显然我必须运行 manage.py tellsiteid 它会向我吐出一个我可以在我的 settings.py 中使用的 ID,这将使错误消失,但是当我尝试运行 manage.py tellsiteid 我得到:

Traceback (most recent call last):
File "./manage.py", line 14, in <module>
execute_manager(settings)
File "/Users/holografix/.virtualenvs/django_nonrel_env/lib/python2.7/site-   packages/django/core/management/__init__.py", line 438, in execute_manager    utility.execute()
File "/Users/holografix/.virtualenvs/django_nonrel_env/lib/python2.7/site-packages/django/core/management/__init__.py", line 379, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/Users/holografix/.virtualenvs/django_nonrel_env/lib/python2.7/site-packages/django/core/management/base.py", line 191, in run_from_argv
self.execute(*args, **options.__dict__)
File "/Users/holografix/.virtualenvs/django_nonrel_env/lib/python2.7/site-packages/django/core/management/base.py", line 220, in execute
output = self.handle(*args, **options)
File "/Users/holografix/.virtualenvs/django_nonrel_env/lib/python2.7/site-packages/django/core/management/base.py", line 351, in handle
return self.handle_noargs(**options)
File "/Users/holografix/.virtualenvs/django_nonrel_env/lib/python2.7/site-packages/django_mongodb_engine/management/commands/tellsiteid.py", line 8, in handle_noargs
site_id = self._get_site_id()
File "/Users/holografix/.virtualenvs/django_nonrel_env/lib/python2.7/site-packages/django_mongodb_engine/management/commands/tellsiteid.py", line 19, in _get_site_id
return Site.objects.get().id
File "/Users/holografix/.virtualenvs/django_nonrel_env/lib/python2.7/site-packages/django/db/models/manager.py", line 132, in get
return self.get_query_set().get(*args, **kwargs)
File "/Users/holografix/.virtualenvs/django_nonrel_env/lib/python2.7/site-packages/django/db/models/query.py", line 351, in get
% self.model._meta.object_name)
django.contrib.sites.models.DoesNotExist: Site matching query does not exist.

【问题讨论】:

    标签: django mongodb pymongo django-nonrel


    【解决方案1】:

    sudo python manage.py shell

    from django.contrib.sites.models import Site
    Site().save()
    Site.objects.all()[0].id
    u'53aa6456984edd0d5e547e03'
    

    放到settings.py SITE_ID = u'53aa6456984edd0d5e547e03'

    【讨论】:

      【解决方案2】:

      由于某种原因,这里的解决方案都不适合我。 python ./manage.py tellsiteid,没有django_site 集合,注释掉'django.contrib.sites' 导致奇怪的错误。

      不过,从 shell 中获取 ID 对我有用,这里有详细说明:

      https://gist.github.com/ielshareef/2986459 或者这里Site matching query does not exist

      python ./manage.py shell
      >>> from django.contrib.sites.models import Site
      >>> Site().save()
      >>> Site.objects.all()[0].id
      u'4fe7aa759e654e2662000000'
      

      把它放在settings.py,一切都很好!

      【讨论】:

        【解决方案3】:

        如果您不需要sites 功能(很可能),只需关闭django.contrib.sites 应用程序,它将修复与 SITE_ID 相关的 MongoDB 问题:

        INSTALLED_APPS = (   
            (...)
            # 'django.contrib.sites',  # Comment this out
            (...)
        )
        

        【讨论】:

        • 对我来说非常有用,就像听起来一样简单!之前搞的乱七八糟!非常感谢
        【解决方案4】:

        您可以创建您的网站,然后获取 id:

        python ./manage.py shell
        
        >>> from django.contrib.sites.models import Site
        >>> s = Site()
        >>> s.save()
        

        然后:

        python ./manage.py tellsiteid
        

        【讨论】:

        • 那么,如果我们不小心运行了不止一次,你能清除它吗?
        【解决方案5】:

        我使用manage.py syncdb,然后使用manage.py tellsiteid,但仍然显示错误。

        我终于通过删除数据库并再次同步来解决它。

        希望这可以帮助某人:)

        【讨论】:

          【解决方案6】:

          很可能您还没有创建站点,为此您需要运行命令

          python manage.py syncdb
          

          这将创建站点,现在您需要在设置文件中添加它的 site_id。去获取站点 id,连接到正在运行的 mongodb 引擎,然后运行以下命令

          use mydatabase --/# or whatever name you have for your database.
          db.django_site.find()
          

          你会得到类似的东西

          ObjectId("4f4e968adea3b3b30c00001d")
          

          然后在你的设置文件中,放入

          site_id = u'4f4e968adea3b3b30c00001d'
          

          并且管理界面应该可以工作。是吗?

          【讨论】:

            【解决方案7】:

            前几天我在设置过程中遇到了这个问题。

            基本上你需要登录一个 mongo shell 并查找你的 siteid 然后将它添加到你的 settings.py

            登录 mongo shell

            mongo
            

            选择你的数据库

            use *name*
            

            然后在 django_site 上执行 find()

            db.django_site.find()
            

            然后打开你的 settings.py 并编辑 site_ID ="" 行(我的在下面)

            SITE_ID = u'4f1f82011d41c81e5c00001d'
            

            这应该让你启动并运行

            【讨论】:

              【解决方案8】:

              您尚未创建任何站点。运行manage.py syncdb 创建一个。

              【讨论】:

              • manage.py syncdb 即使在删除数据库并重新开始之后也会引发相同的异常。这对我有用:1)删除数据库2)根据stackoverflow.com/a/9780984/76900创建Site 3)将SITE_ID添加到设置4)运行manage.py syncdb
              【解决方案9】:
              猜你喜欢
              • 2018-08-16
              • 2016-03-19
              • 2023-01-03
              • 2019-02-07
              • 1970-01-01
              • 1970-01-01
              • 2015-09-04
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多