Проблемы миграции django с postgres

Я работаю над проектом Django, который докеризирован и использует Postgres для базы данных, но мы столкнулись с проблемой миграций, Каждый раз, когда кто-то вносит изменения в модель, если другой разработчик берет из git и пытается перенести миграции, используя python manage.py migrate, потому что у нас уже есть файл миграций, иногда возникает ошибка table already exists или table doesn't exists, поэтому каждый раз мне нужно применять миграции, используя --fake, но я думаю, что это не очень хороший подход, чтобы мигрировать каждый раз, используя флаг --fake.

docker-compose.yml

version: "3.8"
   
services:
  db:
    container_name: db
    image: "postgres"
    restart: always
    volumes:
      - postgres_data:/var/lib/postgresql/data/
    env_file:
      - dev.env
    ports:
      - "5432:5432"
    environment:
      - POSTGRES_DB=POSTGRES_DB
      - POSTGRES_USER=POSTGRES_USER
      - POSTGRES_PASSWORD=POSTGRES_PASSWORD

  app:
    container_name: app
    build: 
      context: .
    command: bash -c "python manage.py runserver 0.0.0.0:8000"
    volumes:
      - ./core:/app
      - ./data/web:/vol/web
    env_file:
      - dev.env
    ports:
      - "8000:8000"
    depends_on:
      - db

volumes:
  postgres_data:

Dockerfile

FROM python:3
ENV PYTHONDONTWRITEBYTECODE=1
ENV PYTHONUNBUFFERED=1

WORKDIR /app
EXPOSE 8000

COPY ./core/ /app/
COPY ./scripts /scripts

# installing nano and cron service
RUN apt-get update
RUN apt-get install -y cron
RUN apt-get install nano

RUN pip install --upgrade pip
COPY requirements.txt /app/

# install dependencies and manage assets
RUN pip install -r requirements.txt && \
    mkdir -p /vol/web/static && \
    mkdir -p /vol/web/media

# files for cron logs
RUN mkdir /cron
RUN touch /cron/django_cron.log

# start cron service
RUN service cron start
RUN service cron restart

RUN chmod +x /scripts/run.sh

CMD ["/scripts/run.sh"]

run.sh

#!/bin/sh

set -e

ls -la /vol/
ls -la /vol/web

whoami

python manage.py collectstatic --noinput
python manage.py migrate
service cron start 
service cron restart
python manage.py crontab add 
printenv > env.txt
cat /var/spool/cron/crontabs/root >> env.txt
cat env.txt > /var/spool/cron/crontabs/root 

uwsgi --socket :9000 --workers 4 --master --enable-threads --module alectify.wsgi

Django предлагает возможность создавать обновленные миграции, когда модели меняются, смотрите https://docs.djangoproject.com/en/4.0/topics/migrations/#workflow для более подробной информации, но вы можете генерировать и затем применять обновленные миграции, используя:

python manage.py makemigrations
python manage.py migrate
Вернуться на верх