相关疑难解决方法(0)

如何通过django中的迁移和数据向现有ManyToManyField添加选项

我无法在文档或在线中找到对特定问题的引用.

我有很多关系.

class Books(models.Model):
    name = models.CharField(max_length=100)

class Authors(models.Model):
    name = models.CharField(max_length=100)
    books = models.ManyToManyField(Books)
Run Code Online (Sandbox Code Playgroud)

这有迁移和数据.现在我需要使用through选项,以便在表中添加一个包含多对多关系的额外字段.

class Authorship(models.Model):
    book = models.ForeignKey(Books)
    author = models.ForeignKey(Authors)
    ordering = models.PositiveIntegerField(default=1)

class Authors(models.Model):
    name = models.CharField(max_length=100)
    books = models.ManyToManyField(Books, through=Authorship)
Run Code Online (Sandbox Code Playgroud)

当我运行迁移时,django会为Authorship模型创建新的迁移.我尝试通过orderingAuthorship表中添加列并在表中更改books列来手动创建迁移文件,Authors但是我遇到了一些迁移问题.

operations = [
    migrations.AddField(
        model_name='authorship',
        name='ordering',
        field=models.PositiveIntegerField(default=1),
    ),
    migrations.AlterField(
        model_name='authors',
        name='books',
        field=models.ManyToManyField(to='app_name.Books', through='app_name.Authorship'),
    ),
]
Run Code Online (Sandbox Code Playgroud)

在尝试迁移时,KeyError: ('app_name', u'authorship')我认为还有其他因素会受到影响,从而导致错误.

我错过了什么?有没有其他方法可以解决这个问题?

django django-models django-migrations

20
推荐指数
2
解决办法
4426
查看次数

在django中将数据从"多对多"迁移到"多对多通"

我有一个模特

class Category(models.Model):
    title           = models.CharField(...)
    entry           = models.ManyToManyField(Entry,null=True,blank=True,
                                             related_name='category_entries',
                                             )
Run Code Online (Sandbox Code Playgroud)

我希望重构每个关系的附加数据:

class Category(models.Model):
    title           = models.CharField(...)
    entry           = models.ManyToManyField(Entry,null=True,blank=True,
                                             related_name='category_entries',
                                             through='CategoryEntry',
                                             )
Run Code Online (Sandbox Code Playgroud)

但是南方删除了现有的表格.我如何保留现有的mtm关系?

django django-models django-south

17
推荐指数
3
解决办法
4894
查看次数

在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
查看次数