2012-01-11 14 views
6

SO Creé un proyecto django y una aplicación según el tutorial y tengo todas las dependencias necesarias para el motor MongoDB. Todo parecía estar funcionando bien hasta que intenté habilitar la interfaz de administración.Django MongoDB Error del motor al ejecutar tellsiteid

que sin comentar los bits requieren, y añadió 'django_mongodb_engine' y 'djangotoolbox' a la sección de aplicaciones en settings.py

Cuando trato de entrar en localhost: 8000/admin Me aparece un error:

"Los valores de AutoField (clave primaria predeterminada) deben ser cadenas que representen un ObjectId en MongoDB (en su lugar se obtuvo u'1). Asegúrese de que su SITE_ID contenga una cadena ObjectId válida."

Después de buscar en Google aparentemente tengo que ejecutar manage.py tellsiteid y me escupirá una identificación que puedo usar dentro de mi settings.py que hará desaparecer el error, pero cuando intento ejecutar manage.py tellsiteid Puedo obtener:

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. 

Respuesta

5

no ha creado ningún sitio todavía. Ejecute manage.py syncdb para crear uno.

+3

'syncdb' manage.py plantea la misma excepción, incluso después de dejar caer la base de datos y de partida Fresco. Esto funcionó para mí: 1) soltar la base de datos 2) crear un 'Sitio' según http://stackoverflow.com/a/9780984/76900 3) agregar' SITE_ID' a la configuración 4) ejecutar 'manage.py syncdb' –

2

Me encontré con esto durante mi configuración el otro día.

Básicamente necesitas logotipo en una consola mongo y la búsqueda de su siteid luego añadirlo a su settings.py

registro en una consola mongo

mongo 

seleccione su base de datos

use *name* 

luego haz un find() en django_site

db.django_site.find() 

continuación, abra su settings.py y editar la línea site_id = "" (el mío está por debajo)

SITE_ID = u'4f1f82011d41c81e5c00001d' 

que deben recibir preparación para usar el

2

más probable es que usted no ha creado un sitio, sin embargo, a ello es necesario para ejecutar el comando

python manage.py syncdb 

Esto crea el sitio, ahora es necesario agregar su site_id en su archivo de configuración. Ir a buscar el identificador de sitio, conectarse a MongoDB motor que se está ejecutando, y ejecute los siguientes comandos

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

obtendrá algo así como

ObjectId("4f4e968adea3b3b30c00001d") 

continuación, en el archivo de configuración, puesto

site_id = u'4f4e968adea3b3b30c00001d' 

y la interfaz de administración debería funcionar. ¿Lo hace?

0

Yo uso manage.py syncdb y luego manage.py tellsiteid pero aún aparece el error.

Finalmente lo resuelvo abandonando la base de datos y sincronizando de nuevo.

Esperamos que esto pueda ayudar a alguien :)

12

Usted puede crear su sitio, y luego, obtener el ID:

python ./manage.py shell 

>>> from django.contrib.sites.models import Site 
>>> s = Site() 
>>> s.save() 

y luego:

python ./manage.py tellsiteid 
+0

Entonces, ¿qué pasa si accidentalmente ejecutamos esto más de una vez, puede borrarlo? – Jeff

12

Si no es necesario la funcionalidad sites (que es muy probable) simplemente apague la aplicación django.contrib.sites y solucionará los problemas de MongoDB relacionados con SITE_ID:

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

¡Muy útil para mí tan simple como suena! Tengo un desastre antes de eso! Muchas gracias – c24b

+0

la respuesta perfecta que estaba buscando. muchas gracias – kishore

3

Por alguna razón ninguna de las soluciones aquí funcionó para mí. python ./manage.py tellsiteid, no había django_site colección, y comentar 'django.contrib.sites' causó errores extraños.

Agarrando el ID de la cáscara trabajaban para mí, sin embargo, se detallan aquí:

https://gist.github.com/ielshareef/2986459 o aquí 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' 

Póngalo en settings.py y todo funcionaba muy bien!

0

sudo shell pitón manage.py

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

Póngalo en settings.py SITE_ID = u'53aa6456984edd0d5e547e03'

Cuestiones relacionadas