Getting Site Matching Query Does Not Exist Error after creating django admin

Viewed 47254

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?

13 Answers

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.

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.

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)

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.

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.

Its all due to if you accidentally delete site from django admin site which is by default (example.com). The code mentioned below also raised an Runtime error.

from django.contrib.sites.models import Site

so simply make an increment in your SITE_ID by 1 For example if by default it is 1 than change it with 2 change from SITE_ID = 1 TO: SITE_ID = 2

from django.contrib.sites.models import Site
Site.objects.create(name='example.com', domain='example.com')

Above solved the issue.

But when I logged in Admin Panel, there was another site example.com so I believe if someone puts SITE_ID = 2 this will also work.

Related