在django 1.8中的表更改后无法进行迁移

时间:2016-01-11 11:34:37

标签: django django-models

我在模型中添加了一个字段'name'然后我运行make migrations然后迁移但是它仍然没有检测到最近的更改而是它检测到旧的更改然后当我运行迁移它表已经存在为什么会这样?需要帮助

这里是models.py

class Category(MPTTModel):
    name = models.CharField(max_length =120 , null=True , blank=True)
    title = models.CharField(max_length =120)
    parent = models.ForeignKey('self' , null = True , blank = True , verbose_name='parent category', related_name='categories')
    description = models.TextField(null=True , blank=True)
    active = models.BooleanField(default=True)
    slug = models.SlugField(blank=True , unique=True)
    timestamp = models.DateTimeField(auto_now_add=True,auto_now=False)

    def get_absolute_url(self):
            return reverse('categories', kwargs={'path': self.get_path()})

这是迁移文件

# -*- coding: utf-8 -*-
from __future__ import unicode_literals

from django.db import models, migrations
from django.conf import settings
import products.models


class Migration(migrations.Migration):

    dependencies = [
        migrations.swappable_dependency(settings.AUTH_USER_MODEL),
    ]

    operations = [
        migrations.CreateModel(
            name='Attribute',
            fields=[
                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
                ('option', models.CharField(max_length=100, choices=[(b'color', b'color'), (b'size', b'size'), (b'Type', b'Type'), (b'Style', b'Style'), (b'sleeves', b'sleeves')])),
                ('value', models.CharField(max_length=100)),
            ],
        ),
        migrations.CreateModel(
            name='Brand',
            fields=[
                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
                ('title', models.CharField(default=b'', max_length=50)),
                ('slug', models.SlugField(unique=True, blank=True)),
                ('active', models.BooleanField(default=True)),
                ('lft', models.PositiveIntegerField(editable=False, db_index=True)),
                ('rght', models.PositiveIntegerField(editable=False, db_index=True)),
                ('tree_id', models.PositiveIntegerField(editable=False, db_index=True)),
                ('level', models.PositiveIntegerField(editable=False, db_index=True)),
                ('parent', models.ForeignKey(blank=True, to='products.Brand', null=True)),
            ],
            options={
                'abstract': False,
            },
        ),
        migrations.CreateModel(
            name='BrandImage',
            fields=[
                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
                ('is_slider', models.BooleanField(default=False)),
                ('is_featured', models.BooleanField(default=False)),
                ('is_logo', models.BooleanField(default=False)),
                ('active', models.BooleanField(default=True)),
                ('image', models.ImageField(upload_to=products.models.brand_upload_to)),
                ('brand', models.ForeignKey(related_name='brandimages', to='products.Brand')),
            ],
        ),
        migrations.CreateModel(
            name='Category',
            fields=[
                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
                ('name', models.CharField(max_length=120, null=True, blank=True)),
                ('title', models.CharField(max_length=120)),
                ('description', models.TextField(null=True, blank=True)),
                ('active', models.BooleanField(default=True)),
                ('slug', models.SlugField(unique=True, blank=True)),
                ('timestamp', models.DateTimeField(auto_now_add=True)),
                ('lft', models.PositiveIntegerField(editable=False, db_index=True)),
                ('rght', models.PositiveIntegerField(editable=False, db_index=True)),
                ('tree_id', models.PositiveIntegerField(editable=False, db_index=True)),
                ('level', models.PositiveIntegerField(editable=False, db_index=True)),
                ('parent', models.ForeignKey(related_name='categories', verbose_name=b'parent category', blank=True, to='products.Category', null=True)),
            ],
            options={
                'abstract': False,
            },
        ),
        migrations.CreateModel(
            name='CategoryImage',
            fields=[
                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
                ('image', models.ImageField(upload_to=products.models.category_upload_to)),
                ('category', models.ForeignKey(related_name='categoryimages', to='products.Category')),
            ],
        ),
        migrations.CreateModel(
            name='Filters',
            fields=[
                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
                ('filtername', models.CharField(default=b'', max_length=200)),
                ('filtervalue', models.CharField(default=b'', max_length=200)),
                ('category', models.ForeignKey(related_name='category', to='products.Category')),
            ],
        ),
        migrations.CreateModel(
            name='Product',
            fields=[
                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
                ('title', models.CharField(max_length=500)),
                ('gender', models.CharField(max_length=10, choices=[(b'Male', b'male'), (b'female', b'female'), (b'boys', b'boys'), (b'girls', b'girls')])),
                ('SKU', models.CharField(unique=True, max_length=100, blank=True)),
                ('description', models.TextField(max_length=500, null=True, blank=True)),
                ('price', models.IntegerField()),
                ('color', models.CharField(max_length=120)),
                ('discount', models.IntegerField(null=True, blank=True)),
                ('active', models.BooleanField(default=True)),
                ('is_related', models.BooleanField(default=False)),
                ('is_combo', models.BooleanField(default=False)),
                ('is_verified', models.BooleanField(default=False)),
                ('in_stock', models.BooleanField(default=False)),
                ('slug', models.SlugField(unique=True, blank=True)),
                ('timestamp', models.DateTimeField(auto_now_add=True)),
                ('brand', models.ForeignKey(related_name='products', to='products.Brand')),
                ('category', models.ForeignKey(related_name='products', default=b'', verbose_name=b'categories', to='products.Category')),
                ('parent', models.ForeignKey(related_name='children', blank=True, to='products.Product', null=True)),
            ],
        ),
        migrations.CreateModel(
            name='ProductAttribute',
            fields=[
                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
                ('name', models.CharField(max_length=100)),
                ('value', models.CharField(max_length=100)),
                ('product', models.ForeignKey(to='products.Product')),
            ],
        ),
        migrations.CreateModel(
            name='ProductImage',
            fields=[
                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
                ('image', models.ImageField(upload_to=products.models.image_upload_to)),
                ('product', models.ForeignKey(to='products.Product')),
            ],
        ),
        migrations.CreateModel(
            name='Rating',
            fields=[
                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
                ('rating', models.IntegerField(null=True, blank=True)),
                ('verified', models.BooleanField(default=False)),
                ('product', models.ForeignKey(to='products.Product')),
                ('user', models.ForeignKey(to=settings.AUTH_USER_MODEL)),
            ],
        ),
        migrations.CreateModel(
            name='Size',
            fields=[
                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
                ('name', models.CharField(max_length=100)),
                ('value', models.CharField(max_length=100)),
                ('product', models.ForeignKey(to='products.Product')),
            ],
        ),
        migrations.AddField(
            model_name='filters',
            name='product',
            field=models.ForeignKey(to='products.Product'),
        ),
        migrations.AlterUniqueTogether(
            name='size',
            unique_together=set([('product', 'value')]),
        ),
        migrations.AlterUniqueTogether(
            name='product',
            unique_together=set([('SKU', 'slug', 'category', 'brand')]),
        ),
    ]

当我运行迁移时会发生这种情况

django.db.utils.OperationalError: table "products_attribute" already exists

我无法删除db文件并进行迁移,因为我在表中有数据。我该怎么办? 有没有办法保存我的数据?

1 个答案:

答案 0 :(得分:2)

如果历史记录中没有执行迁移,解决方案很简单:

  1. 检查数据库中表格的结构
  2. 修改模型(撤消最近的一些更改),使它们与您的数据库结构相对应
  3. 删除所有迁移(不要忘记* .pyc文件)
  4. 在您的应用上运行makemigrations
  5. 运行migrate --fake-initial
  6. 重做对模型的所有更改
  7. 再次运行makemigrations
  8. run migrate
相关问题