#python #django #python-3.x #postgresql #postgis
#python #django #python-3.x #postgresql #postgis
Вопрос:
Я пытаюсь добавить поле location в свою модель django с помощью расширения postgis, когда я пытаюсь перенести его, отображается ошибка:
django.db.utils.OperationalError: не удалось открыть файл управления расширением «/ usr / share / postgresql / 10 / extension / postgis.control»: такого файла или каталога нет
Я обновил свой settings.py
INSTALLED_APPS = [
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'meenfee',
'accounts',
'rest_framework',
'rest_auth',
'rest_auth.registration',
'django.contrib.sites',
'allauth',
'django.contrib.gis',
'allauth.account',
'allauth.socialaccount',
'allauth.socialaccount.providers.facebook',
'allauth.socialaccount.providers.google',
'django.contrib.admin',
]
DATABASES = {
'default': {
'ENGINE': 'django.contrib.gis.db.backends.postgis',
'NAME': 'meenfeefinal',
'USER': 'meenfeefinaluser',
'PASSWORD': 'password',
'HOST': 'localhost',
'PORT': '',
}
}
вот мой models.py. Взгляните на поле location
from django.contrib.gis.db import models as gis_models
class Service(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
service_name = models.CharField(max_length=200,null=True,default="sample service")
category = models.ForeignKey(Category, on_delete=models.CASCADE)
subcategory = models.ForeignKey(SubCategory,on_delete=models.CASCADE)
experience = models.TextField(blank=True,null=True)
levelskill = models.CharField(max_length=120, choices=LEVELSKILLS)
service_place = models.CharField(max_length=120, choices=LOCATION)
location = gis_models.PointField(u'longitude/latitude',geography=True, blank=True, null=True)
city = models.ForeignKey(City,blank=True,null=True,on_delete=models.DO_NOTHING)
distance_limit = models.CharField(max_length=100, choices=DISTANCE)
service_pricing = models.PositiveIntegerField(help_text='in Jordanian dinar')
pricing_timing_unit = models.CharField(max_length=30,choices=PRICINGUNIT)
quote_at_request = models.BooleanField(default=False, help_text='This will create popup when they accept a requester request')
provide_tools = models.BooleanField(default=True)
tool_specify = models.TextField(blank =True, null=True)
instant_booking = models.BooleanField(default =True)
avg_rating = models.FloatField(default=0.0)
created = models.DateTimeField(auto_now_add=True)
def __int__(self):
return self.id
class Meta:
verbose_name_plural = "Services"
Я просто хочу успешно добавить поле location в свою модель Service Заранее благодарю вас
Ответ №1:
в вашей postgres DB отсутствует плагин postgis
Пожалуйста, установите расширения postgis, используя приведенную ниже команду
sudo apt-get install postgis postgresql-9.3-postgis-scripts
пожалуйста, используйте версию postgis, такую же, как ваша postgres db
Комментарии:
1. для всех, кто использует docker —
RUN apt-get install -y postgis postgresql-9.3-postgis-scripts
— не забывайте-y
2. Спасибо, это помогло решить мою проблему! Мне нужно было только установить
postgis
, хотя
Ответ №2:
sudo apt-get install postgis postgresql-11-postgis-scripts
дало мне:
The following packages have unmet dependencies:
postgis : Depends: libgdal20 (>= 2.0.1) but it is not installable
Depends: libproj12 (>= 4.9.0) but it is not installable
Recommends: postgresql-postgis
Recommends: postgis-doc but it is not going to be installed
Затем я успешно попробовал:
sudo apt-get install postgresql-11-postgis-2.5-scripts