问题
I'm going through the standard Django tutorial to create an admin for an app. After commenting the admin related stuff in settings and running syncdb I'm getting this message:
DoesNotExist at /admin/ Site matching query does not exist.
Can anyone help me figure this out?
回答1:
The Site
object for your Django project is missing. Each Django project has a Site
object which contains the site's name and domain. It is usually automatically created when creating a Django project (in particular, when the syncdb
command runs) but in your case it seems that didn't happen.
To fix it:
Open the Django shell for your site (python manage.py shell
).
Type the following:
>>> from django.contrib.sites.models import Site
>>> Site.objects.create(name='example.com', domain='example.com')
If you want to change these values later, go to your admin panel (/admin/
) and edit the site object in the section Sites
.
回答2:
In addition to Simeon Visser's answer for those of you still experiencing problems, make sure the SITE_ID
variable in your settings matches the ID of your newly created Site
-object.
回答3:
When you include the django.contrib.sites to your INSTALLED_APPS and run the command "python manage.py migrate" the app automatically creates a object into "django_site" table (with domain name and display name equals to "example.com". There is no need to create it by yourself.
Probably you just need to add the setting SITE_ID = 1 to your settings.py file.
回答4:
comment out django.contrib.sites from the installed apps. i.e.
#'django.contrib.sites',
回答5:
If you already have example.com in your sites table after you run
python manage.py migrate
You need to get id of this entry.
To get the ID you can do -
python manage.py shell
from django.contrib.sites.models import Site
print Site.objects.get(name='example.com').id
Get the id you get here into setting.py
. Eg.
SITE_ID = 8
Basically ID in table corresponding yo tour site and in the settings.py should match.
回答6:
You could also consider of using fixture feature of django to populate the data automatically: https://docs.djangoproject.com/en/dev/howto/initial-data/
[
{
"model" : "sites.site",
"pk" : 1,
"fields": {
"name" : "example.com",
"domain" : "127.0.0.1:8010"
}
}
]
回答7:
I'm a Django newbie. I got the same error when going through the tutorial. My django_site
DB table was empty. I chose to drop all tables named "django_*". Then when I reran syncdb
, the missing django tables were created, and the django_site
DB table was populated with id=1, domain=example.com, name=example.com. Evidently the Site
class is backed by the django_site
DB table. Now I understand the problem and the solution above that populated the table using the Site.objects.create()
method. Thanks Simeon.
回答8:
If you use South and initial_data fixtures, data could be loaded not properly. To fix it add
if 'test' in sys.argv or 'jenkins' in sys.argv:
SOUTH_TESTS_MIGRATE = False
at the end of your settings file
回答9:
Sometimes if you add more Sites via Admin and delete some of them each site has an ID, it was not working for me once I changed the ID in the DB it started working, so make sure SITE_ID matches the ID in the database.
回答10:
Site object is missed so you have to add 1 Site object
Solution:
open Django shell(python manage.py shell):
In [1]: from django.contrib.sites.models import Site
In [2]: Site.objects.create(name='example.com',domain='example.com').save()
In [3]: s=Site.objects.filter(name='example.com')[0]
In [4]: s.id
Out[4]: 3
then open your settings.py
file and add SITE_ID = 3
put that value in SITE_ID
= which you get after (s.id
)
回答11:
I was also struggling with the same error for quite some time now. I had by mistake deleted the example.com from sites directory in admin. Once I added the site using above solutions, it worked. Also site_id automatically became 2 when I created the example.com and so had to change site_id to 2 in my settings file also. Thank you.
来源:https://stackoverflow.com/questions/11476210/getting-site-matching-query-does-not-exist-error-after-creating-django-admin