109๐
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
.
45๐
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.
- [Django]-405 "Method POST is not allowed" in Django REST framework
- [Django]-TextField missing in django.forms
- [Django]-How do you change the collation type for a MySQL column?
37๐
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.
- [Django]-How to check if a user is logged in (how to properly use user.is_authenticated)?
- [Django]-Overriding the save method in Django ModelForm
- [Django]-How to solve "Page not found (404)" error in Django?
10๐
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.
- [Django]-Split models.py into several files
- [Django]-Django project models.py versus app models.py
- [Django]-How to do math in a Django template?
7๐
comment out django.contrib.sites from the installed apps. i.e.
#'django.contrib.sites',
- [Django]-How to force migrations to a DB if some tables already exist in Django?
- [Django]-Is there a simple way to get group names of a user in django
- [Django]-Django admin: How to display the field marked as "editable=False" in the model?
4๐
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"
}
}
]
- [Django]-Elegant setup of Python logging in Django
- [Django]-How can I programmatically obtain the max_length of a Django model field?
- [Django]-Django rest framework: query parameters in detail_route
1๐
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
)
- [Django]-Are Django SECRET_KEY's per instance or per app?
- [Django]-Django model manager objects.create where is the documentation?
- [Django]-POST jQuery array to Django
0๐
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.
- [Django]-Pulling data to the template from an external database with django
- [Django]-Django reverse lookup of foreign keys
- [Django]-Open the file in universal-newline mode using the CSV Django module
0๐
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
- [Django]-History of Django's popularity
- [Django]-Why does Django's render() function need the "request" argument?
- [Django]-Django annotation with nested filter
0๐
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.
- [Django]-Django package to generate random alphanumeric string
- [Django]-Render HTML to PDF in Django site
- [Django]-Django 1.7 โ makemigrations not detecting changes
0๐
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.
- [Django]-How to use subquery in django?
- [Django]-Django Model โ Get distinct value list
- [Django]-How can I register a single view (not a viewset) on my router?
0๐
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
- [Django]-Unit testing with django-celery?
- [Django]-Enforce unique upload file names using django?
- [Django]-How to compare dates in Django templates
0๐
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.
- [Django]-Django-rest-framework returning 403 response on POST, PUT, DELETE despite AllowAny permissions
- [Django]-Multiple Database Config in Django 1.2
- [Django]-Django, Models & Forms: replace "This field is required" message