Fal*_*gel 5 django django-1.7 django-migrations
我有以下型号
class VucutBolgesi(models.Model):
site = models.ForeignKey(Site)
bolge = models.CharField(verbose_name="Bölge", max_length=75)
hareketler = models.ManyToManyField("Hareket", verbose_name="Hareketler", null=True, blank=True, help_text="Bölgeyi çal??t?ran hareketler")
class Hareket(models.Model):
site = models.ForeignKey(Site)
hareket = models.CharField(verbose_name="Hareket", max_length=75 )
bolgeler = models.ManyToManyField(VucutBolgesi, verbose_name="Çal??t?rd??? Bölgeler", null=True, blank=True,
help_text="Hareketin çal??t?rd??? bölgeler")
Run Code Online (Sandbox Code Playgroud)
我在两个表上都有相同的M2M,因为我希望在两个管理表单上显示相同的中间表.他们还必须使用相同的表(不创建两个单独的表),因为一个管理表单中的一个更改必须反映到另一个.就像,如果我添加一个新的Hareket
来VucutBolgesi
过HareketAdmin
,然后同样的结果shoudl上看到VucutBolgesiAdmin
过.
为了实现这一点,我首先删除hareketler
M2M字段,VucutBolgesi
因此Hareketler
模型将创建中间表.我这个迁移,然后添加hareketler
到VucutBolgesi
与db_table
属性,这样它会识别同一中介表.
该领域的最终外观如下
hareketler = models.ManyToManyField("Hareket", verbose_name="Hareketler", db_table="antrenman_hareket_bolgeler",
null=True, blank=True, help_text="Bölgeyi çal??t?ran hareketler")
Run Code Online (Sandbox Code Playgroud)
当我尝试迁移它时,django会抛出异常
django.db.utils.OperationalError: table "antrenman_hareket_bolgeler" already exists
Run Code Online (Sandbox Code Playgroud)
我应该如何伪造这种迁移?
以下是每次运行时django创建的迁移 makemigrations
dependencies = [
('antrenman', '0005_vucutbolgesi_hareketler'),
]
operations = [
migrations.AddField(
model_name='vucutbolgesi',
name='hareketler',
field=models.ManyToManyField(to='antrenman.Hareket', db_table=b'antrenman_hareket_bolgeler', blank=True, help_text=b'B\xc3\xb6lgeyi \xc3\xa7al\xc4\xb1\xc5\x9ft\xc4\xb1ran hareketler', null=True, verbose_name=b'Hareketler'),
preserve_default=True,
),
]
Run Code Online (Sandbox Code Playgroud)
注意:编辑相关的迁移文件并删除migrations.AddField
不起作用,因为django会为migrations.AddField
每个创建相同的内容makemigrations
aja*_*est 12
是否可以使迁移总是伪造,只需覆盖apply和unapply方法.对此的后果没有得到充分的研究,但这对我来说很有用.
在以下示例中,我们创建了一个重用django.contrib.auth.User.group
M2M表的迁移b'profile_user_groups
:
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('profile', '0001_initial'),
]
operations = [
migrations.AddField(
model_name='user',
name='organizations',
field=models.ManyToManyField(db_column=b'group_id', db_table=b'profile_user_groups', related_name='members', to='profile.Organization'),
),
]
def apply(self, project_state, schema_editor, collect_sql=False):
return project_state.clone()
def unapply(self, project_state, schema_editor, collect_sql=False):
return project_state.clone()
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
8494 次 |
最近记录: |