88
You don’t really need the sites
framework if you only run one site from the project, so the easiest fix would be to remove the following item from your INSTALLED_APPS
and the error should go away:
'django.contrib.sites'
You can also re-create the missing Site object from shell. Run python manage.py shell and then:
from django.contrib.sites.models import Site
Site.objects.create(pk=1, domain='www.example.com', name='example.com')
16
You can fix this error if you are using django.contrib.sites
without removing it by changing SITE_ID = 1
value in settings.py
file.
It is happen to me when I changed domain name on my server, I deleted old domain name from http://mynewdomainname.com/admin/sites/site/
manually, and the old domain record in database has id = 1
, also I added new domain name mynewdomainname.com
and it is id was id = 2
,
I just changed to SITE_ID = 2
and the error gone SITE_ID refers to current “pk” of active domain name you use as default.
In code:
>>> from django.contrib.sites.models import Site
>>> # get_current() came from SiteManager class manager,
>>> # see site-packages/django/contrib/sites/models.py
>>> current_site = Site.objects.get_current()
>>> print(current_site.pk)
2
>>> print(current_site.domain)
'http://mynewdomainname.com'
this happen after settings.py
changed
SITE_ID = 2
Be careful about current domain id in django sites app.
- [Django]-Convert Django Model object to dict with all of the fields intact
- [Django]-Adding extra data to Django Rest Framework results for entire result set
- [Django]-How can my django model DateField add 30 days to the provided value?
3
The same problem also suddenly came to me, and you know there’re many solutions. However, what’s the reason of this sudden problem?
After dig in deeply, I found the reason is that, we ignored a step in the first syncdb action.
When you have your first syncdb, django will ask you to create a default account, if you don’t input in this interactive show, that site object would not be created automatically.
So be careful of this. I’m using django 1.3.1, don’t know whether the latest version has resolved this issue.
- [Django]-In-Memory broker for celery unit tests
- [Django]-How to set True as default value for BooleanField on Django?
- [Django]-Coverage.py warning: No data was collected. (no-data-collected)
- [Django]-Cleanest & Fastest server setup for Django
- [Django]-How do you catch this exception?
- [Django]-Django bulk_create with ignore rows that cause IntegrityError?
2
Since the above comments are pretty old and the syncdb
command doesn’t exist, and I don’t want to remove django.contrib.sites
, here’s what worked for me:
Increment SITE_ID
. I had SITE_ID = 1
, changed it to SITE_ID = 2
and everything worked again.
- [Django]-Django custom field validator vs. clean
- [Django]-How can I iterate over ManyToManyField?
- [Django]-How can my django model DateField add 30 days to the provided value?
1
just fixed the issue by an another way:
I use PostgreSQL and Django 1.45…
as i removed the www.example.com Site and added a new www.xxx.com Site it was added as ID=2
’cause PostgreSQL doesn’t go back in the ID numbers and the login and logout Django-Sites are somehow bound only to the ID=1 Site in your DB…
I went to my PostgreSQL DB and changed the ID of www.xxx.com to 1 and then I was able to see the login and logout Site again
btw. [yes, you just can remove the django.contrib.sites from your settings.py if you don’t need it ^^ (but I haven’t tried this one out in my case, with the ID number problem)]
hope it will work for further users!
- [Django]-"No 'Access-Control-Allow-Origin' header is present on the requested resource" in django
- [Django]-Disable button after submit with jQuery
- [Django]-Django: accessing session variables from within a template?
- [Django]-Django: Reference to an outer query may only be used in a subquery
- [Django]-Where to store secret keys DJANGO
- [Django]-Error: "dictionary update sequence element #0 has length 1; 2 is required" on Django 1.4
0
Yes, the solution mentioned at the top can be (part of) the solution.
I’ve noticed however, that not only including django.contrib.sites
without configuration can cause that problem, also including any site of
allauth
(pip install django-allauth) might cause this problem if said package is not configured correctly.
(And allauth
is as far as I’ve seen not configured correctly by default…)
- [Django]-Django manage.py runserver invalid syntax
- [Django]-Raw SQL queries in Django views
- [Django]-How can I use Django OAuth Toolkit with Python Social Auth?
0
Another thing you can do is simple if you get some error or just want to change site.
- Download sqlitebrowser
- open your sqlite.db
- search for django_sites
- change domain name and display name to whatever you want
- [Django]-How Can I Disable Authentication in Django REST Framework
- [Django]-Django post_save preventing recursion without overriding model save()
- [Django]-Django REST Framework and FileField absolute url
-2
Check your Window task manager and make sure that there is 1 process name ‘python.exe’ is running. If there are many, delete all of them then restart the server. This solution works for me.
- [Django]-Django model naming convention
- [Django]-How can I get the full/absolute URL (with domain) in Django?
- [Django]-How do I iterate over the options of a SelectField in a template?