Python manage.py makemigrations говорит, что таблица уже существует в проекте Django
Я пытаюсь заставить своего коллегу начать работу с проектом, который я уже создал. Когда мы пытаемся запустить сервер, он говорит, что одна из таблиц уже существует. Мы погуглили, попробовали makemigrations и migrate --fake из сообщений вроде этого Django : Table doesn't exist, но все равно получаем тот же результат. Удаление таблиц в базе данных не является вариантом, потому что она подключается к некоторым производственным данным. Как я могу обойти это? Отслеживание приведено ниже.
сначала удалите все файлы миграций на ваших приложениях затем удалите базу данных и создайте ее снова
then run
python3 manage.py makemigrations
и затем:
python3 manage.py migrate
если не получилось, покажите свою модель в этом вопросе
Чтобы предотвратить подобное в будущем, стоит запомнить: Файлы миграции Django следует рассматривать как часть кодовой базы, удаляя их только при переходе из south migration в django.core.migrations . Перезагрузка южной миграции в продакшене происходит следующим образом: удалить migrations убедитесь, что модель либо удалена, либо закомментирована.
python manage.py makemigrations
python manage.py migrate --fake-initial
также попробуйте :
python manage.py makemigrations
python manage.py migrate --fake APPNAME zero
Но в вашем случае, приложение пытается получить доступ к базе данных при импорте, что может быть очень сложно исправить, для дальнейшей отладки этого, пожалуйста, поделитесь models.py
models.py:
from django.db import models
from django.contrib.auth.models import User, Group
from django.db.models.signals import post_save
from django.conf import settings
class Site(models.Model):
site = models.CharField(max_length=50, unique=True)
name = models.CharField(max_length=50)
sic = models.CharField(max_length=10, blank=True)
city = models.CharField(max_length=50)
state = models.CharField(max_length=50, null=True)
country = models.CharField(max_length=10)
site_type = models.CharField(max_length=30)
region = models.CharField(max_length=4)
gmt_offset = models.FloatField()
system = models.CharField(max_length=10)
timezone = models.CharField(max_length=50)
active = models.BooleanField(default=True)
def __str__(self):
return(self.site)
class Site_Building(models.Model):
site = models.ForeignKey(Site, on_delete=models.CASCADE)
building_name = models.CharField(max_length=50)
address_line_1 = models.CharField(max_length=100)
address_line_2 = models.CharField(max_length=100, blank=True)
city = models.CharField(max_length=50)
state = models.CharField(max_length=50, null=True)
country = models.CharField(max_length=30)
zipcode = models.CharField(max_length=15)
office_phone = models.CharField(max_length=20, blank=True)
class Contact(models.Model):
site = models.CharField(max_length=50)
coverage = models.CharField(max_length=100)
contact_person = models.CharField(max_length=100)
function = models.CharField(max_length=50)
contact_type = models.CharField(max_length=50, default='Warehouse/DC')
class Contact_Phone_Number(models.Model):
contact = models.ForeignKey(Contact, on_delete=models.CASCADE)
phone_type = models.CharField(max_length=20)
phone_number = models.CharField(max_length=20)
class Contact_Email(models.Model):
contact = models.ForeignKey(Contact, on_delete=models.CASCADE)
email = models.CharField(max_length=100)
class UserProfile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE,
unique=False)
department = models.CharField(max_length=100, default="")
default_warehouse = models.CharField(max_length=100,
default="Warehouse")
employee_id = models.CharField(max_length=50, unique=True, blank=False)
temp_status = models.BooleanField(default=False)
datetime_offset = models.IntegerField(default=0)
regional_access = models.CharField(max_length=100, default='[]')
def __str__(self):
return(self.user.username)
def create_profile(sender, **kwargs):
if kwargs['created']:
user_profile =
UserProfile.objects.create(user=kwargs['instance'])
user_profile.save()
post_save.connect(create_profile, sender=User)