相关疑难解决方法(0)

使用Django/South重命名模型的最简单方法?

我一直在寻找南方网站,谷歌和SO的答案,但找不到一个简单的方法来做到这一点.

我想用South重命名一个Django模型.说你有以下内容:

class Foo(models.Model):
    name = models.CharField()

class FooTwo(models.Model):
    name = models.CharField()
    foo = models.ForeignKey(Foo)
Run Code Online (Sandbox Code Playgroud)

并且你想将Foo转换为Bar,即

class Bar(models.Model):
    name = models.CharField()

class FooTwo(models.Model):
    name = models.CharField()
    foo = models.ForeignKey(Bar)
Run Code Online (Sandbox Code Playgroud)

为了简单起见,我只是尝试将名称从更改FooBar,但暂时忽略该foo成员FooTwo.

使用南方最简单的方法是什么?

  1. 我可能会进行数据迁移,但这似乎很复杂.
  2. 编写自定义迁移,例如db.rename_table('city_citystate', 'geo_citystate'),但在这种情况下我不确定如何修复外键.
  3. 你知道一种更简单的方法吗?

python django rename django-models django-south

141
推荐指数
3
解决办法
3万
查看次数

迁移django-model字段名称更改而不会丢失数据

我有一个django项目,其中包含一个已包含数据的数据库表.我想更改字段名称而不会丢失该列中的任何数据.我最初的计划是简单地以一种实际上不会改变db表名称的方式更改模型字段名称(使用db_columncolumn参数):

原型号:

class Foo(models.Model):
  orig_name = models.CharField(max_length=50)
Run Code Online (Sandbox Code Playgroud)

新型号:

class Foo(models.Model):
  name = models.CharField(max_length=50, db_column='orig_name')
Run Code Online (Sandbox Code Playgroud)

但是,运行South's schemamigration --auto会生成一个删除原始列的迁移脚本orig_name,并添加一个新列name,这会产生删除该列中数据的不良副作用.(我也很困惑为什么South想要更改db中列的名称,因为我对db_column的理解是它允许更改模型字段名而不更改数据库表列的名称).

如果我无法在不更改db字段的情况下更改模型字段,我想我可以做更直接的名称更改,如下所示:

原型号:

class Foo(models.Model):
  orig_name = models.CharField(max_length=50)
Run Code Online (Sandbox Code Playgroud)

新型号:

class Foo(models.Model):
  name = models.CharField(max_length=50)
Run Code Online (Sandbox Code Playgroud)

无论我最终使用哪种策略(我更喜欢第一种,但会发现第二种可接受),我主要担心的是确保我不会丢失该列中已有的数据.

这需要一个多步骤的过程吗?(例如1.添加列,2.将数据从旧列迁移到新列,以及3.删除原始列)或者我可以使用类似的方式更改迁移脚本db.alter_column吗?

更改列名称时保留该列中数据的最佳方法是什么?

django-models customcolumn django-south custom-fields

34
推荐指数
5
解决办法
2万
查看次数

如何用South重命名外键字段?

重命名一个简单的charfield等似乎很容易(Django - 如何使用South重命名模型字段?)

但是,当我尝试在ForeignKey字段上使用相同的时候,我收到一个错误:

_mysql_exceptions.OperationalError: (1091, "Can't DROP '[new_fkey_field_name]'; check that column/key exists")
Run Code Online (Sandbox Code Playgroud)

这源于迁移试图由于某种原因向后运行(如跟踪中所示).

有任何想法吗?

django django-south

13
推荐指数
4
解决办法
5415
查看次数

如何使用south将数据从字段迁移到表中的另一个字段

我正在使用南方的Django项目进行模式迁移.我有以下场景:

模式

class Book(model.Models):
    name = models.CharField(max_length=255, blank=True)
    bid = models.IntegerField(blank=True, null=True)

class Author(model.Models):
   name = models.CharField(max_length=255, blank=True)
   book_id = models.ForeignKey(Book, null=True, to_field="bid", db_column="bookID")
Run Code Online (Sandbox Code Playgroud)

我想将作者模型更改为以下内容:

class Author(model.Models):
   name = models.CharField(max_length=255, blank=True)
   book = models.ForeignKey(Book, null=True, db_column="book_id")
Run Code Online (Sandbox Code Playgroud)

但没有松散的数据.我想按出价搜索每本书,并将作者发现的那一个分配给作者模型中的新字段.

谢谢

django django-south python-2.7

5
推荐指数
1
解决办法
1507
查看次数

在不丢弃表的情况下更改模型中的Django数据类型

我创建了一个Django应用程序.现在我想在模型中更改我的db字段中的1个字段类型.由于数据库中已存在一些具有当前类型的记录,我想通过在models.py中更改它就无法更改类型.通过谷歌搜索我发现它可以通过改变它通过SQL控制台而不删除表来更改它.但作为一个Django新手,我无法做到这一点.有人可以帮我这样做吗?这是我的models.py

class EmployeeDetails(models.Model):
    userName = models.CharField(max_length=200)
    designation = models.CharField(max_length=200)
    employeeID = models.IntegerField()
    contactNumber = models.CharField(max_length=200)
    project = models.CharField(max_length=200)
    dateOfJoin=models.TextField()
Run Code Online (Sandbox Code Playgroud)

现在我想更改dateOfJoin = models.DateField().如何在不使用sql控制台命令删除表的情况下将TextFieild更改为DateField?

python mysql django postgresql django-models

4
推荐指数
1
解决办法
4974
查看次数