首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OperationalError /管理/租赁/租赁/

OperationalError /管理/租赁/租赁/
EN

Stack Overflow用户
提问于 2016-04-20 07:22:19
回答 3查看 446关注 0票数 0

我有一个包含以下字段的数据库:listingName、so、property、city、place、ownerName、房间、水、便利设施、价格、摘要、phoneNumber、phone_image、电子邮件--我不想要phone_image字段,所以我从models.py中删除了它,并应用了以下命令

代码语言:javascript
复制
python manage.py makemigrations rentals
python manage.py migrate

但我得到的是错误

代码语言:javascript
复制
OperationalError at /admin/rentals/rental/
no such column: rentals_rental.phone_image

因此,我首先删除了我的数据库,然后应用了命令python manage.py迁移,但仍然得到了相同的错误,尽管我的模型没有phone_image字段。

它在本地主机上工作,但在远程不起作用。因为我已经在数字海洋中托管了我的应用程序,包括nginx和gunicorn。

admin.py

代码语言:javascript
复制
from django.contrib import admin
from rentals.models import Rental,Gallery

class InlineGallery(admin.TabularInline):
    model = Gallery
    fk_name = 'rental'

class RentalAdmin(admin.ModelAdmin):
    inlines = [
        InlineGallery,
    ]
admin.site.register(Rental,RentalAdmin)
admin.site.register(Gallery)

models.py

代码语言:javascript
复制
ownerName = models.CharField(_("Owner's Name"),max_length=255, blank=True,null=True,
    help_text=_("Owner's Full Name"))
email = models.CharField(max_length=120,blank=True,null=True)
phoneNumber = models.PositiveIntegerField(blank=False,null=True,
    help_text=_("Phone number of contact person"))
listingName =  models.CharField(_("Lisitng Name"), max_length=255, blank=False,null=True,
    help_text=_("Title of the rental space"))
slug = models.SlugField(unique=True,blank=True,null=True)
summary = models.TextField(max_length=500, blank=True,null=True,help_text=_("Description of the rental space"))
property = models.CharField(_("Property type"),max_length=10,null=True)
room = models.PositiveIntegerField(_("No of Rooms"), blank=False, null=True,
    help_text=_("Number of bedrooms available"))
price = models.PositiveIntegerField(blank=False,null=True,
    help_text=_("Rental price of the space per month"))
city =  models.CharField(_("City"), max_length=255, blank=False,null=True,
    help_text=_("City of the rental space"))
place =  models.CharField(_("Place"), max_length=255, blank=False,null=True,
    help_text=_("Place of the rental space"))
water = models.CharField(_("water facilities"),max_length=50,null=True,
    help_text=_("Is there water facility?"))
amenities = models.CharField(_("amenities"),max_length=100,blank=True,null=True)
phone_image = models.CharField(blank=True, help_text='image form of the phone number', max_length=2048, null=True)
is_published = models.BooleanField(default=True)
created_on = models.DateTimeField(auto_now_add=True)
modified_on = models.DateTimeField(auto_now_add=True)


def __str__(self):
    return self.listingName

我在迁移文件夹中有两个迁移文件

0001_initial.py

代码语言:javascript
复制
# -*- coding: utf-8 -*-
# Generated by Django 1.9.1 on 2016-03-30 14:23
from __future__ import unicode_literals

from django.db import migrations, models
import django.db.models.deletion


class Migration(migrations.Migration):

initial = True

dependencies = [
]

operations = [
    migrations.CreateModel(
        name='Gallery',
        fields=[
            ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
            ('image', models.ImageField(blank=True, null=True, upload_to='upload/')),
        ],
        options={
            'verbose_name_plural': 'Galleries',
            'verbose_name': 'Gallery',
        },
    ),
    migrations.CreateModel(
        name='Rental',
        fields=[
            ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
            ('ownerName', models.CharField(blank=True, help_text="Owner's Full Name", max_length=255, null=True, verbose_name="Owner's Name")),
            ('email', models.CharField(blank=True, max_length=120, null=True)),
            ('phoneNumber', models.PositiveIntegerField(help_text='Phone number of contact person', null=True)),
            ('listingName', models.CharField(help_text='Title of the rental space', max_length=255, null=True, verbose_name='Lisitng Name')),
            ('slug', models.SlugField(blank=True, null=True, unique=True)),
            ('summary', models.TextField(blank=True, help_text='Description of the rental space', max_length=500, null=True)),
            ('property', models.CharField(max_length=10, null=True, verbose_name='Property type')),
            ('room', models.PositiveIntegerField(help_text='Number of bedrooms available', null=True, verbose_name='No of Rooms')),
            ('price', models.PositiveIntegerField(help_text='Rental price of the space per month', null=True)),
            ('city', models.CharField(help_text='City of the rental space', max_length=255, null=True, verbose_name='City')),
            ('place', models.CharField(help_text='Place of the rental space', max_length=255, null=True, verbose_name='Place')),
            ('water', models.CharField(help_text='Is there water facility?', max_length=50, null=True, verbose_name='water facilities')),
            ('amenities', models.CharField(blank=True, max_length=100, null=True, verbose_name='amenities')),
            ('phone_image', models.CharField(blank=True, help_text='image form of the phone number', max_length=2048, null=True)),
            ('is_published', models.BooleanField(default=True)),
            ('created_on', models.DateTimeField(auto_now_add=True)),
            ('modified_on', models.DateTimeField(auto_now_add=True)),
        ],
        options={
            'verbose_name_plural': 'Rents',
            'verbose_name': 'Rent',
        },
    ),
    migrations.AddField(
        model_name='gallery',
        name='rental',
        field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='gallery', to='rentals.Rental', verbose_name='Rental'),
    ),
]

0002_remove_rental_phone_image.py

代码语言:javascript
复制
# -*- coding: utf-8 -*-
# Generated by Django 1.9.1 on 2016-04-20 02:01
from __future__ import unicode_literals

from django.db import migrations


class Migration(migrations.Migration):

dependencies = [
    ('rentals', '0001_initial'),
]

operations = [
    migrations.RemoveField(
        model_name='rental',
        name='phone_image',
    ),
]

我怎样才能克服这个问题?我需要提供更多的信息吗?

谢谢

EN

回答 3

Stack Overflow用户

发布于 2016-04-20 08:04:38

正如您在上面的答案中所说的,该字段被手动从数据库中删除,因此迁移尝试删除数据库中不再存在的字段。

通常,您不应该直接删除db中的字段,而是使用迁移。由于字段已经消失,您现在只能伪造迁移来告诉django已经进行了更改:

代码语言:javascript
复制
manage.py migrate rentals 0002 --fake

确保您是在迁移0001,否则这将是伪造的。

为了确保,您可以先运行以下命令:

代码语言:javascript
复制
manage.py migrate rentals 0001
票数 1
EN

Stack Overflow用户

发布于 2016-04-20 07:53:59

这种类型的错误意味着,表phone_image中没有任何名为rental的列。因此,第二次迁移试图删除表rental中不存在的列。不知何故,您从表中删除了该列,django迁移系统没有注意到它。

作为修复,尝试以下选项之一:

1)删除0002_remove_rental_phone_image.py,在0001_initial.py中删除以下一行:('phone_image', models.CharField(blank=True, help_text='image form of the phone number'....)),并尝试应用迁移(如果它说:table rental is already exist,尝试将其从数据库中删除);

2)删除所有迁移文件,并重新创建数据库、进行迁移并应用它们。

票数 0
EN

Stack Overflow用户

发布于 2016-04-22 18:25:26

编写models.py代码时,运行命令

代码语言:javascript
复制
python manage.py makemigrations rentals

在此命令之后,您将看到0001_any_name.py,然后再次输入命令

代码语言:javascript
复制
python manage.py sqlmigrate rentals 0001    //0001 is prefix of above result

它将创建符合models.py的数据库,然后您可以迁移

代码语言:javascript
复制
python manage.pt migrate

因此,当您第一次创建数据库时,这个过程会第一次运行,但是在任何数据库列中都会出现问题,那么这个过程重复again.your问题就会解决。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36736594

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档