2012-01-11 13 views
6

SO Ho creato un progetto e un'applicazione django come da tutorial e ho tutte le dipendenze necessarie per MongoDB Engine tutto sembrava funzionare bene e dandy fino a quando ho provato a abilitare l'interfaccia di amministrazione.Errore Django MongoDB Engine durante l'esecuzione tellsiteid

ho commentata la richiedono bit, e ha aggiunto 'django_mongodb_engine' e 'djangotoolbox' alla sezione applicazioni in settings.py

Quando provo ad entrare in localhost: 8000/admin ottengo un errore:

"I valori AutoField (chiave primaria predefinita) devono essere stringhe che rappresentano un ObjectId su MongoDB (ottenuto invece u'1 '). Assicurati che il tuo SITE_ID contenga una stringa ObjectId valida."

Dopo un po 'googling a quanto pare devo correre tellsiteid manage.py e mi sputerò un ID posso utilizzare nel mio settings.py che farà l'errore di andare via, ma quando provo a fare funzionare tellsiteid manage.py ottengo:

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. 

risposta

5

non hai creato alcun sito ancora. Esegui manage.py syncdb per crearne uno.

+3

'syncdb' manage.py solleva la stessa eccezione anche dopo aver lasciato la base di dati e di partenza fresco. Questo ha funzionato per me: 1) rilasciare il database 2) creare un 'Sito' come per http://stackoverflow.com/a/9780984/76900 3) aggiungere' SITE_ID' alle impostazioni 4) eseguire 'manage.py syncdb' –

2

Mi sono imbattuto in questo durante il mio setup l'altro giorno.

Fondamentalmente è necessario il logo in un guscio mongo e di ricerca la vostra siteid quindi aggiungerlo al settings.py

log in un guscio mongo

mongo 

selezionare il db

use *name* 

poi fai un find() su django_site

db.django_site.find() 
.210

quindi aprire il settings.py e modificare la riga site_id = "" (il mio è al di sotto)

SITE_ID = u'4f1f82011d41c81e5c00001d' 

Questo dovrebbe farti installato e funzionante

2

Molto probabilmente tu non hai ancora creato un sito, a non quindi è necessario eseguire il comando

python manage.py syncdb 

Questo crea il sito, ora è necessario aggiungere il suo site_id nel file delle impostazioni. Vai a prendere il sito id, connettersi a MongoDB motore che è in esecuzione, ed eseguire i seguenti comandi

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

otterrete qualcosa di simile

ObjectId("4f4e968adea3b3b30c00001d") 

poi nel file di impostazioni, mettere

site_id = u'4f4e968adea3b3b30c00001d' 

e l'interfaccia di amministrazione dovrebbe funzionare. Lo fa?

0

Io uso manage.py syncdb e quindi manage.py tellsiteid ma visualizzo ancora l'errore.

Alla fine lo risolvo rilasciando il database e sincronizzando di nuovo.

Spero che questo possa aiutare qualcuno :)

12

È possibile creare il vostro sito, e quindi, ottenere l'ID:

python ./manage.py shell 

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

e poi:

python ./manage.py tellsiteid 
+0

Quindi, cosa succede se l'abbiamo accidentalmente eseguito più di una volta, puoi cancellarlo? – Jeff

12

Se non è necessario la funzionalità sites (che è molto probabile) semplicemente disattiva l'app django.contrib.sites e risolverà i problemi MongoDB relativi a SITE_ID:

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

Molto utile per me così semplice come sembra! Hai un casino prima! Grazie mille – c24b

+0

la risposta perfetta che stavo cercando. molte grazie – kishore

3

Per qualche motivo nessuna delle soluzioni qui ha funzionato per me. python ./manage.py tellsiteid, non esisteva la raccolta django_site e il commento di 'django.contrib.sites' causava errori strani.

Afferrando l'ID dal guscio lavorato per me, però, dettagliato qui:

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

Mettetela in settings.py e tutto funzionava benissimo!

0

sudo shell Python manage.py

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

Mettetela in settings.py SITE_ID = u'53aa6456984edd0d5e547e03'

Problemi correlati