Django.core.exceptions.ImproperlyConfigured: settings.DATABASES неправильно настроен. Пожалуйста, предоставьте значение ИМЯ

Я пытаюсь создать приложение с django и postgres с помощью docker-compose, но получаю ошибку с "NAME"

Вот мой settings.py

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'POSTGRES_NAME': 'postgres',
        'POSTGRES_USER': 'postgres',
        'POSTGRES_PASSWORD': env('POSTGRES_PASSWORD'),
        'POSTGRES_HOST': 'localhost',
        'POSTGRES_PORT': '5432',
    }
}

Вот мой docker-compose

version: "3.8"

services:
  web:
    build: .
    container_name: django
    command: python manage.py runserver 0.0.0.0:8000
    volumes:
      - .:/usr/src/app
    ports:
      - "8000:8000"
    depends_on:
      - db
    environment:
      DATABASE_URL: postgres://$POSTGRES_USER:$POSTGRES_PASSWORD@$POSTGRES_HOST:$POSTGRES_PORT/$POSTGRES_NAME
    env_file:
      - .env

  db:
    image: postgres
    container_name: pgdb
    ports:
      - "5432"
    env_file:
      - .env
    environment:
      POSTGRES_USER: $POSTGRES_USER
      POSTGRES_PASSWORD: $POSTGRES_PASSWORD
      POSTGRES_NAME: $POSTGRES_NAME

Вот мой .env

DEBUG=on
SECRET_KEY=sec

DATABASE_URL=postgres://postgres:pass@localhost:5432/postgres
POSTGRES_USER=postgres
POSTGRES_PASSWORD=pass
POSTGRES_HOST=localhost
POSTGRES_PORT=5432
POSTGRES_NAME=postgres

Откуда взялось это "ИМЯ"?

Спасибо за помощь

В моем коде многое было неправильно. После 6 часов отладки.

Сначала я изменил все свои docker-compose.yml на

version: "3.9"
services:
  db:
    image: postgres
    volumes:
      - ./data/db:/var/lib/postgresql/data

  web:
    build: ./backend
    command: python manage.py runserver 0.0.0.0:8000
    volumes:
      - .:/usr/src/app
    ports:
      - "8000:8000"
    depends_on:
      - db

В моем settings.py я сделал:

import environ
import os

env = environ.Env(
    # set casting, default value
    DEBUG=(bool, False)
)

# Set the project base directory
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

# Take environment variables from .env file
environ.Env.read_env(os.path.join(BASE_DIR, '.env'))

# False if not in os.environ because of casting above
DEBUG = env('DEBUG')

# Raises Django's ImproperlyConfigured
# exception if SECRET_KEY not in os.environ
SECRET_KEY = env('SECRET_KEY')

# Parse database connection url strings
# like psql://user:pass@127.0.0.1:8458/db
DATABASES = {
    # read os.environ['DATABASE_URL'] and raises
    # ImproperlyConfigured exception if not found
    #
    # The db() method is an alias for db_url().
    'default': env.db(),


}

Затем я создал .env

DEBUG=on
SECRET_KEY=xxx
DATABASE_URL=psql://postgres:123@db:5432/postgres

Затем я вошел в docker, используя

docker ps -a

docker exec -it <container_id> bash

psql postgres postgres

\password postgres

123
123

Затем я переместил свою базу данных

docker-compose exec web python manage.py makemigrations
docker-compose exec web python manage.py migrate
Вернуться на верх