相关疑难解决方法(0)

Django - 如何使用South重命名模型字段?

我想更改模型中特定字段的名称:

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

应改为:

class Foo(models.Model):
    full_name     = models.CharField()
    odd_relation  = models.ForeignKey(Bar)
Run Code Online (Sandbox Code Playgroud)

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

python django django-models django-south

208
推荐指数
5
解决办法
4万
查看次数

用于重命名模型和关系字段的Django迁移策略

我打算在现有的Django项目中重命名几个模型,其中有许多其他模型与我想要重命名的模型有外键关系.我很确定这需要多次迁移,但我不确定具体的程序.

假设我开始在Django应用程序中使用以下模型myapp:

class Foo(models.Model):
    name = models.CharField(unique=True, max_length=32)
    description = models.TextField(null=True, blank=True)


class AnotherModel(models.Model):
    foo = models.ForeignKey(Foo)
    is_awesome = models.BooleanField()


class YetAnotherModel(models.Model):
    foo = models.ForeignKey(Foo)
    is_ridonkulous = models.BooleanField()
Run Code Online (Sandbox Code Playgroud)

我想重命名Foo模型,因为名称并没有真正意义,并且导致代码混乱,并且Bar会使名称更加清晰.

从我在Django开发文档中读到的内容,我假设以下迁移策略:

步骤1

修改models.py:

class Bar(models.Model):  # <-- changed model name
    name = models.CharField(unique=True, max_length=32)
    description = models.TextField(null=True, blank=True)


class AnotherModel(models.Model):
    foo = models.ForeignKey(Bar)  # <-- changed relation, but not field name
    is_awesome = models.BooleanField()


class YetAnotherModel(models.Model):
    foo = models.ForeignKey(Bar)  # <-- changed relation, …
Run Code Online (Sandbox Code Playgroud)

python django django-migrations

133
推荐指数
8
解决办法
6万
查看次数

如何更改Django应用程序的名称?

我已经通过重命名其文件夹,导入及其所有引用(模板/索引)来更改Django中应用程序的名称.但是现在我尝试运行时遇到了这个错误python manage.py runserver

Error: Could not import settings 'nameofmynewapp.settings' (Is it on sys.path?): No module named settings
Run Code Online (Sandbox Code Playgroud)

如何调试并解决此错误?有线索吗?

python django

129
推荐指数
5
解决办法
9万
查看次数

在django字段中添加"直通"表并与南方迁移?

看起来这应该是"容易"或至少在某处记录,我只是无法找到它.

让我们说我有一个模型:

class A(models.Model):
    users = models.ManyToMany('auth.User', blank=True)
Run Code Online (Sandbox Code Playgroud)

现在我想迁移到一个through表来向ManyToMany关系添加字段...

class AUsers(models.Model):
    user = models.ForeignKey('auth.User')
    a = models.ForeignKey('A')
    new_field = models.BooleanField()

class A(models.Model):
    users = models.ManyToMany('auth.User', blank=True, through='AUsers')
Run Code Online (Sandbox Code Playgroud)

然后我做:

% ./manage.py schemamigration app --auto
Run Code Online (Sandbox Code Playgroud)

并不奇怪,它告诉我它将通过表删除原始的自动创建并为其创建一个新的AUsers.目前最好的做法是什么?是否有适当的方式迁移到新through表?我db_table在Meta 使用吗?我是不是through=...马上使用...然后做一个schemamigration --auto,然后a datamigration复制当前表(不知何故,不确定...)然后添加through关系,让它杀死表?

这里的诀窍是什么?这真的很难吗?

django django-south

14
推荐指数
2
解决办法
2693
查看次数

使用--noinput的Django南迁移在重命名表时不会删除contenttypes

我使用django-south在django项目中迁移数据库表.我正在重命名模型,正如前一个问题中所讨论的那样:

    # Renaming model from 'Foo' to 'Bar'                                                                                                                      
    db.rename_table('myapp_foo', 'myapp_bar')                                                                                                                        
    db.send_create_signal('myapp', ['Bar'])
Run Code Online (Sandbox Code Playgroud)

但是,我使用fabric自动将我的应用程序部署到生产服务器,我希望迁移在没有任何用户输入的情况下运行.为此,我使用noinput选项运行migration命令,如下所示

python manage.py migrate --noinput
Run Code Online (Sandbox Code Playgroud)

这种方法很好,除了send_create_signal在这种模式下不删除过时的内容类型.

这是因为django contenttype管理命令update_contenttypes仅在给定输入时才删除陈旧的contenttypes.

我可以直接在南迁移中复制update_contenttypes命令,但这似乎不是一个好的解决方案.有没有人建议如何触发删除内容类型而不重复django命令中的内容?

django user-input model rename django-south

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

在不丢弃表的情况下更改模型中的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
查看次数