Getting Site Matching Query Does Not Exist Error a

2019-01-16 09:06发布

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?

9条回答
闹够了就滚
2楼-- · 2019-01-16 09:26

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.

查看更多
家丑人穷心不美
3楼-- · 2019-01-16 09:27

comment out django.contrib.sites from the installed apps. i.e.

#'django.contrib.sites',
查看更多
萌系小妹纸
4楼-- · 2019-01-16 09:34

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.

查看更多
相关推荐>>
5楼-- · 2019-01-16 09:34

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.

查看更多
Explosion°爆炸
6楼-- · 2019-01-16 09:35

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.

查看更多
淡お忘
7楼-- · 2019-01-16 09:36

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"
        }
    }
]
查看更多
登录 后发表回答