python - tutorial - django urls
La consulta de coincidencia de sitios no existe Error después de crear el administrador django (9)
Estoy repasando el tutorial estándar de Django para crear un administrador para una aplicación. Después de comentar las cosas relacionadas con el administrador en la configuración y ejecutar syncdb recibo este mensaje:
DoesNotExist at /admin/ Site matching query does not exist.
¿Alguien puede ayudarme a resolver esto?
A veces, si agrega más Sitios a través del Administrador y elimina algunos de ellos, cada sitio tiene una ID, no me funcionó una vez que cambié el ID en el DB que comenzó a funcionar, así que asegúrese de que SITE_ID coincida con la ID en la base de datos.
Además de la respuesta de Simeon Visser para aquellos de ustedes que sigan teniendo problemas, asegúrese de que la variable SITE_ID
en su configuración coincida con la ID de su Site
creado recientemente -objeto.
Cuando incluye django.contrib.sites en INSTALLED_APPS y ejecuta el comando "python manage.py migrate", la aplicación crea automáticamente un objeto en la tabla "django_site" (con el nombre de dominio y el nombre para mostrar equivale a "example.com". no hay necesidad de crearlo usted mismo.
Probablemente solo necesite agregar la configuración SITE_ID = 1 a su archivo settings.py.
El objeto del Site
para su proyecto Django falta. Cada proyecto de Django tiene un objeto de Site
que contiene el nombre y el dominio del sitio. Por lo general, se crea automáticamente al crear un proyecto Django (en particular, cuando se syncdb
comando syncdb
), pero en su caso parece que eso no sucedió.
Arreglarlo:
Abra el shell Django para su sitio ( python manage.py shell
).
Escriba lo siguiente:
>>> from django.contrib.sites.models import Site
>>> Site.objects.create(name=''example.com'', domain=''example.com'')
Si desea cambiar estos valores más adelante, vaya a su panel de administración ( /admin/
) y edite el objeto del sitio en la sección Sites
.
Si usa los accesorios South y initial_data, los datos podrían cargarse incorrectamente. Para arreglarlo, agrega
if ''test'' in sys.argv or ''jenkins'' in sys.argv:
SOUTH_TESTS_MIGRATE = False
al final de tu archivo de configuración
Si ya tiene example.com en su tabla de sitios después de ejecutar
python manage.py migrate
Debes obtener una identificación de esta entrada.
Para obtener la identificación que puedes hacer,
python manage.py shell
from django.contrib.sites.models import Site
print Site.objects.get(name=''example.com'').id
Obtenga la ID que obtiene aquí en setting.py
. P.ej.
SITE_ID = 8
Básicamente, la ID en la tabla correspondiente al sitio de la gira y en settings.py debe coincidir.
Soy un novato de Django. Obtuve el mismo error cuando repaso el tutorial. Mi tabla django_site
DB estaba vacía. Elegí dejar caer todas las tablas llamadas "django_ *". Luego, cuando volví a sincronizar syncdb
, se crearon las tablas de django que faltan, y la tabla de django_site
datos django_site
con id = 1, domain = example.com, name = example.com. Evidentemente, la clase Site
está respaldada por la tabla DB de django_site
. Ahora entiendo el problema y la solución anterior que Site.objects.create()
la tabla con el método Site.objects.create()
. Gracias Simeon.
También podría considerar el uso de la función de dispositivo de django para completar los datos automáticamente: https://docs.djangoproject.com/en/dev/howto/initial-data/
[
{
"model" : "sites.site",
"pk" : 1,
"fields": {
"name" : "example.com",
"domain" : "127.0.0.1:8010"
}
}
]
comente django.contrib.sites desde las aplicaciones instaladas. es decir
#''django.contrib.sites'',