Site matching query does not exist

PythonDjango

Python Problem Overview


Python noob, as in this is my first project, so excuse my unfamiliarity.

The site was working very well until I clicked "log out" on my app. After that, the website would give me this error: DoesNotExist at /login/ Site matching query does not exist.

I searched everywhere and the only solution I get relates to setting up the site framework, SITE_ID, etc. I think those items on my computer are fine, but I can't find a walkthrough/guide to help me check on them.

Can anyone tell me what the problem is and how to fix it? Thanks in advance :3

 DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3', # Add 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'.
        'NAME': '/home/dotcloud/nhs.db',                      # Or path to database file if using sqlite3.
        'USER': '',                      # Not used with sqlite3.
        'PASSWORD': '',                  # Not used with sqlite3.
        'HOST': '',                      # Set to empty string for localhost. Not used with sqlite3.
        'PORT': '',                      # Set to empty string for default. Not used with sqlite3.
    }
}

Python Solutions


Solution 1 - Python

If you don't have a site defined in your database and django wants to reference it, you will need to create one.

From a python manage.py shell :

from django.contrib.sites.models import Site
new_site = Site.objects.create(domain='foo.com', name='foo.com')
print (new_site.id)

Now set that site ID in your settings.py to SITE_ID

Solution 2 - Python

Table django_site must contain a row with the same value than id (by default equals to 1), as SITE_ID is set to (inside your settings.py).

Solution 3 - Python

Add SITE_ID = 1 to settings.py in your django project.

Solution 4 - Python

I fixed it without using python manage.py shell

At first I tried using the commands above using manage.py shell:

from django.contrib.sites.models import Site
new_site = Site.objects.create(domain='foo.com', name='foo.com')
print(new_site.id)

But it gave out an INTEGRITY ERROR

The short answer is add SITE_ID = 1 to your settings.py If you want to know what your site id is, then go into the actual database, I downloaded sqliteman to see what my table had. So whatever site id you have in the table is what gets assigned to SITE_ID

This is because there is a function get_current that goes looking for SITE_ID and it doesn't find it in your settings.py

tables
-django_site
--Columns
---id

it should have id as 1, name as example.com, domain as example.com

Solution 5 - Python

I see answers to create a new site and reference id for that. But if you already have a site or somehow you deleted and created the site again from UI then the id keeps on incrementing. To solve this you can get the id as follows:

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.

Solution 6 - Python

enter image description here

Query the ID in your database django_site tables and set the right one in your Django settings.py, for example: SITE_ID = 3

Solution 7 - Python

it seems you fotgot to add SITE_ID=1 in settings.py

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
Questionuser1576866View Question on Stackoverflow
Solution 1 - PythonjdiView Answer on Stackoverflow
Solution 2 - Pythonmichael_arshynovView Answer on Stackoverflow
Solution 3 - PythonGoodness EzeokaforView Answer on Stackoverflow
Solution 4 - PythonRenato EspinozaView Answer on Stackoverflow
Solution 5 - PythonAniket ThakurView Answer on Stackoverflow
Solution 6 - PythonFreman ZhangView Answer on Stackoverflow
Solution 7 - PythonOdiljon DjamalovView Answer on Stackoverflow