17

I've got a GeoDjango instance connected to a PostGIS database backend. When I query a table in this database, I get the error in the title:

AttributeError: 'DatabaseOperations' object has no attribute 'select'

As suggested elsewhere, I checked to make sure that my local_settings.py file specified the correct database engine: 'ENGINE': 'django.contrib.gis.db.backends.postgis'. This is already correct in my settings file.

How do you fix this problem?

Adam
  • 3,668
  • 6
  • 30
  • 55
  • 1
    It sounds as if the engine is not `'django.contrib.gis.db.backends.postgis'` despite what you say about local settings, but yo haven’t included enough information to tell why that is the case. – Alasdair Feb 20 '18 at 22:43

2 Answers2

32

It sounds as though your Django settings aren't quite right and that your database ENGINE may be 'django.db.backends.postgresql', when it should be 'django.contrib.gis.db.backends.postgis'. To confirm, run:

python manage.py shell

>>> from django.conf import settings
>>> settings.DATABASES
{'default': {'ATOMIC_REQUESTS': False,
  'AUTOCOMMIT': True,
  'CONN_MAX_AGE': 0,
  'ENGINE': 'django.contrib.gis.db.backends.postgis',
  'HOST': '',
  'NAME': 'mydatabase',
  'OPTIONS': {},
  'PASSWORD': '',
  'PORT': '',
  'TEST': {'CHARSET': None, 'COLLATION': None, 'MIRROR': None, 'NAME': None},
  'TIME_ZONE': None,
  'USER': ''}}

The above shows that I have one 'default' database configured and it's using the "postgis" engine (which is what we want).

Watch out for the use of the dj_database_url package in your settings as this may be overriding the database settings from environment variables. Also watch for multiple databases other than "default" in the settings.

Ben Sturmfels
  • 1,303
  • 13
  • 22
0

Check if you forgot to add,

'django.contrib.gis',

inside your INSTALLED_APPS

Raj Yadav
  • 9,677
  • 6
  • 35
  • 30