异常值:列 home_profile.goal 不存在
Exception Value: column home_profile.goal does not exist
我真的被困在这里了,我有点困惑为什么会抛出这个错误。我是 运行 Django 1.10,实时数据库是一个 postgresql 数据库。我对postgres不太熟悉。为了灵活性,我一直在使用 sqlite 进行所有开发工作。
我最近在我的模型中添加了两个新字段。他们都是 IntegerFields
我在当地没有遇到任何问题。我还没有将我的更改部署到我的实时环境中,我收到了上述错误。
goal = models.IntegerField(default=1, choices=weight_goal, null=True, blank=True)
我试过删除字段,删除所有迁移文件,甚至删除模型本身。但是,当我重新添加该字段时,它会抛出相同的错误。
我做了一些研究,我所能看到的是“删除数据库并重新创建它”。嗯,这是不可能的,因为我会丢失实时数据库中的所有数据。
我不太愿意深入实时数据库并尝试手动添加列。我的意思是,这似乎有点 OTT?
注意:我正在通过 Heroku 部署盒子
资料模型:
class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
image = CloudinaryField('image', default="thumbnail_mqe6ne")
weight = models.DecimalField(help_text="KG", max_digits=5, default=0, decimal_places=2, validators=[
MinValueValidator(30),
MaxValueValidator(600)
])
height = models.DecimalField(help_text="CM", max_digits=8, default=0, decimal_places=2, validators=[
MinValueValidator(20),
MaxValueValidator(600),
])
gender_option = (
('Male', 'Male'),
('Female', 'Female'),
)
profile_status = (
('Public', 'Public'),
('Private', 'Private'),
)
birth_date = models.DateField(blank=True, verbose_name="Date of Birth")
gender = models.CharField(choices=gender_option, max_length=10)
bio = models.TextField(max_length=300, blank=True)
location = models.CharField(max_length=30, blank=True)
weight_goal = (
(1, 'Weight Loss'),
(2, 'Weight / Muscle weight gain'),
)
goal = models.IntegerField(default=1, choices=weight_goal, null=True, blank=True)
activity = (
(1, 'Mostly inactive or sedentary'),
(2, 'Fairly active'),
(3, 'Moderately active'),
(4, 'Active'),
(5, 'Very active'),
)
activity_level = models.IntegerField(default=1, choices=activity, null=True, blank=True)
intensity = (
(1, 'Very light training'),
(2, 'Moderate intensity'),
(3, 'Moderate to high intensity (1 - 3 hours)'),
(4, 'Very high intensity training (4+ Hours Daily)'),
)
training_intensity = models.IntegerField(default=1, choices=intensity)
status = models.CharField(default="Public", max_length=10, choices=profile_status)
非常感谢任何帮助。完整回溯如下:
Environment:
Request Method: GET
Request URL: /
Django Version: 1.10
Python Version: 2.7.13
Installed Applications:
['djangocms_admin_style',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.sites',
'stats',
'home',
'blog',
'haystack',
'ckeditor_uploader',
'ckeditor',
'django_social_share',
'post_office',
'sorl.thumbnail',
'storages',
'cloudinary',
'django.contrib.staticfiles',
'cloudinary_storage',
'django_cleanup',
'django_instagram',
'embed_video',
'easy_thumbnails',
'filer',
'reversion',
'allauth',
'allauth.account',
'allauth.socialaccount',
'allauth.socialaccount.providers.facebook']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'solid_i18n.middleware.SolidLocaleMiddleware',
'whitenoise.middleware.WhiteNoiseMiddleware',
'debug_toolbar.middleware.DebugToolbarMiddleware',
'django.middleware.locale.LocaleMiddleware']
Traceback:
File "/app/.heroku/python/lib/python2.7/site-packages/django/core/handlers/exception.py" in inner
39. response = get_response(request)
File "/app/.heroku/python/lib/python2.7/site-packages/django/core/handlers/base.py" in _legacy_get_response
249. response = self._get_response(request)
File "/app/.heroku/python/lib/python2.7/site-packages/django/core/handlers/base.py" in _get_response
187. response = self.process_exception_by_middleware(e, request)
File "/app/.heroku/python/lib/python2.7/site-packages/django/core/handlers/base.py" in _get_response
185. response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/app/.heroku/python/lib/python2.7/site-packages/django/contrib/auth/decorators.py" in _wrapped_view
23. return view_func(request, *args, **kwargs)
File "/app/home/views.py" in get_user_profile
42. profile = Profile.objects.get(user=request.user.id)
File "/app/.heroku/python/lib/python2.7/site-packages/django/db/models/manager.py" in manager_method
85. return getattr(self.get_queryset(), name)(*args, **kwargs)
File "/app/.heroku/python/lib/python2.7/site-packages/django/db/models/query.py" in get
379. num = len(clone)
File "/app/.heroku/python/lib/python2.7/site-packages/django/db/models/query.py" in __len__
238. self._fetch_all()
File "/app/.heroku/python/lib/python2.7/site-packages/django/db/models/query.py" in _fetch_all
1085. self._result_cache = list(self.iterator())
File "/app/.heroku/python/lib/python2.7/site-packages/django/db/models/query.py" in __iter__
54. results = compiler.execute_sql()
File "/app/.heroku/python/lib/python2.7/site-packages/django/db/models/sql/compiler.py" in execute_sql
835. cursor.execute(sql, params)
File "/app/.heroku/python/lib/python2.7/site-packages/django/db/backends/utils.py" in execute
79. return super(CursorDebugWrapper, self).execute(sql, params)
File "/app/.heroku/python/lib/python2.7/site-packages/django/db/backends/utils.py" in execute
64. return self.cursor.execute(sql, params)
File "/app/.heroku/python/lib/python2.7/site-packages/django/db/utils.py" in __exit__
94. six.reraise(dj_exc_type, dj_exc_value, traceback)
File "/app/.heroku/python/lib/python2.7/site-packages/django/db/backends/utils.py" in execute
64. return self.cursor.execute(sql, params)
Exception Type: ProgrammingError at /profile/
Exception Value: column home_profile.goal does not exist
LINE 1: ... "home_profile"."bio", "home_profile"."location", "home_prof...
^
如果您还没有做的话,首先要做的是创建数据库备份。
database is a postgresql DB. I'm not that familiar with postgres. I've been doing all of my development work with sqlite for flexibility.
对于非平凡的项目,最好在两端使用相同的 RDBMS。
I've done some research and all i can see is 'Drop the DB and create it again"
你不走这条路是对的。这是非常糟糕的建议。
I have tried removing the fields, deleting all the migration files and even removing the model itself. However, when i add the field back in it throws the same error.
但这也是一条相当孤独和危险的道路,你走过了充满陷阱的道路。让我们看看能不能解决问题。
postgresql 抱怨列丢失的事实清楚地表明您有恶意迁移。检查你的备份,看看你是否有一个版本的数据库,with 那一列。如果不这样做,您将丢失一些数据。
如果您有这样的备份,请在 之后通过 psql 或 pgadmin 目视检查数据库中确实缺少该列。
既然您已经清除了迁移,请完全清空该文件夹。确保没有任何 .pyc
文件挂起。
接下来检查您的 django_migrations
table。删除与当前应用程序相关的迁移(我认为 home
)。
下一步
./manage.py makemigrations home
这应该会在您的迁移文件夹中创建一个迁移。确认后做
./manage.py migrate --fake-initial home
现在一切正常。
我真的被困在这里了,我有点困惑为什么会抛出这个错误。我是 运行 Django 1.10,实时数据库是一个 postgresql 数据库。我对postgres不太熟悉。为了灵活性,我一直在使用 sqlite 进行所有开发工作。
我最近在我的模型中添加了两个新字段。他们都是 IntegerFields
我在当地没有遇到任何问题。我还没有将我的更改部署到我的实时环境中,我收到了上述错误。
goal = models.IntegerField(default=1, choices=weight_goal, null=True, blank=True)
我试过删除字段,删除所有迁移文件,甚至删除模型本身。但是,当我重新添加该字段时,它会抛出相同的错误。
我做了一些研究,我所能看到的是“删除数据库并重新创建它”。嗯,这是不可能的,因为我会丢失实时数据库中的所有数据。
我不太愿意深入实时数据库并尝试手动添加列。我的意思是,这似乎有点 OTT?
注意:我正在通过 Heroku 部署盒子
资料模型:
class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
image = CloudinaryField('image', default="thumbnail_mqe6ne")
weight = models.DecimalField(help_text="KG", max_digits=5, default=0, decimal_places=2, validators=[
MinValueValidator(30),
MaxValueValidator(600)
])
height = models.DecimalField(help_text="CM", max_digits=8, default=0, decimal_places=2, validators=[
MinValueValidator(20),
MaxValueValidator(600),
])
gender_option = (
('Male', 'Male'),
('Female', 'Female'),
)
profile_status = (
('Public', 'Public'),
('Private', 'Private'),
)
birth_date = models.DateField(blank=True, verbose_name="Date of Birth")
gender = models.CharField(choices=gender_option, max_length=10)
bio = models.TextField(max_length=300, blank=True)
location = models.CharField(max_length=30, blank=True)
weight_goal = (
(1, 'Weight Loss'),
(2, 'Weight / Muscle weight gain'),
)
goal = models.IntegerField(default=1, choices=weight_goal, null=True, blank=True)
activity = (
(1, 'Mostly inactive or sedentary'),
(2, 'Fairly active'),
(3, 'Moderately active'),
(4, 'Active'),
(5, 'Very active'),
)
activity_level = models.IntegerField(default=1, choices=activity, null=True, blank=True)
intensity = (
(1, 'Very light training'),
(2, 'Moderate intensity'),
(3, 'Moderate to high intensity (1 - 3 hours)'),
(4, 'Very high intensity training (4+ Hours Daily)'),
)
training_intensity = models.IntegerField(default=1, choices=intensity)
status = models.CharField(default="Public", max_length=10, choices=profile_status)
非常感谢任何帮助。完整回溯如下:
Environment:
Request Method: GET
Request URL: /
Django Version: 1.10
Python Version: 2.7.13
Installed Applications:
['djangocms_admin_style',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.sites',
'stats',
'home',
'blog',
'haystack',
'ckeditor_uploader',
'ckeditor',
'django_social_share',
'post_office',
'sorl.thumbnail',
'storages',
'cloudinary',
'django.contrib.staticfiles',
'cloudinary_storage',
'django_cleanup',
'django_instagram',
'embed_video',
'easy_thumbnails',
'filer',
'reversion',
'allauth',
'allauth.account',
'allauth.socialaccount',
'allauth.socialaccount.providers.facebook']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'solid_i18n.middleware.SolidLocaleMiddleware',
'whitenoise.middleware.WhiteNoiseMiddleware',
'debug_toolbar.middleware.DebugToolbarMiddleware',
'django.middleware.locale.LocaleMiddleware']
Traceback:
File "/app/.heroku/python/lib/python2.7/site-packages/django/core/handlers/exception.py" in inner
39. response = get_response(request)
File "/app/.heroku/python/lib/python2.7/site-packages/django/core/handlers/base.py" in _legacy_get_response
249. response = self._get_response(request)
File "/app/.heroku/python/lib/python2.7/site-packages/django/core/handlers/base.py" in _get_response
187. response = self.process_exception_by_middleware(e, request)
File "/app/.heroku/python/lib/python2.7/site-packages/django/core/handlers/base.py" in _get_response
185. response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/app/.heroku/python/lib/python2.7/site-packages/django/contrib/auth/decorators.py" in _wrapped_view
23. return view_func(request, *args, **kwargs)
File "/app/home/views.py" in get_user_profile
42. profile = Profile.objects.get(user=request.user.id)
File "/app/.heroku/python/lib/python2.7/site-packages/django/db/models/manager.py" in manager_method
85. return getattr(self.get_queryset(), name)(*args, **kwargs)
File "/app/.heroku/python/lib/python2.7/site-packages/django/db/models/query.py" in get
379. num = len(clone)
File "/app/.heroku/python/lib/python2.7/site-packages/django/db/models/query.py" in __len__
238. self._fetch_all()
File "/app/.heroku/python/lib/python2.7/site-packages/django/db/models/query.py" in _fetch_all
1085. self._result_cache = list(self.iterator())
File "/app/.heroku/python/lib/python2.7/site-packages/django/db/models/query.py" in __iter__
54. results = compiler.execute_sql()
File "/app/.heroku/python/lib/python2.7/site-packages/django/db/models/sql/compiler.py" in execute_sql
835. cursor.execute(sql, params)
File "/app/.heroku/python/lib/python2.7/site-packages/django/db/backends/utils.py" in execute
79. return super(CursorDebugWrapper, self).execute(sql, params)
File "/app/.heroku/python/lib/python2.7/site-packages/django/db/backends/utils.py" in execute
64. return self.cursor.execute(sql, params)
File "/app/.heroku/python/lib/python2.7/site-packages/django/db/utils.py" in __exit__
94. six.reraise(dj_exc_type, dj_exc_value, traceback)
File "/app/.heroku/python/lib/python2.7/site-packages/django/db/backends/utils.py" in execute
64. return self.cursor.execute(sql, params)
Exception Type: ProgrammingError at /profile/
Exception Value: column home_profile.goal does not exist
LINE 1: ... "home_profile"."bio", "home_profile"."location", "home_prof...
^
如果您还没有做的话,首先要做的是创建数据库备份。
database is a postgresql DB. I'm not that familiar with postgres. I've been doing all of my development work with sqlite for flexibility.
对于非平凡的项目,最好在两端使用相同的 RDBMS。
I've done some research and all i can see is 'Drop the DB and create it again"
你不走这条路是对的。这是非常糟糕的建议。
I have tried removing the fields, deleting all the migration files and even removing the model itself. However, when i add the field back in it throws the same error.
但这也是一条相当孤独和危险的道路,你走过了充满陷阱的道路。让我们看看能不能解决问题。
postgresql 抱怨列丢失的事实清楚地表明您有恶意迁移。检查你的备份,看看你是否有一个版本的数据库,with 那一列。如果不这样做,您将丢失一些数据。
如果您有这样的备份,请在 之后通过 psql 或 pgadmin 目视检查数据库中确实缺少该列。
既然您已经清除了迁移,请完全清空该文件夹。确保没有任何 .pyc
文件挂起。
接下来检查您的 django_migrations
table。删除与当前应用程序相关的迁移(我认为 home
)。
下一步
./manage.py makemigrations home
这应该会在您的迁移文件夹中创建一个迁移。确认后做
./manage.py migrate --fake-initial home
现在一切正常。