【发布时间】:2015-04-25 22:50:32
【问题描述】:
我有以下型号
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")
我在两个表上都有相同的 M2M,因为我希望在两个管理表单上显示相同的中间表。他们还必须使用同一个表(而不是创建两个单独的表),因为一个管理表单中的一个更改必须反映到另一个。比如,如果我通过HareketAdmin 向VucutBolgesi 添加一个新的Hareket,那么VucutBolgesiAdmin 上也应该可以看到相同的结果。
为了实现这一点,我首先从VucutBolgesi 中删除hareketler M2M 字段,以便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")
当我尝试迁移它时,django 抛出以下异常
django.db.utils.OperationalError: table "antrenman_hareket_bolgeler" already exists
我应该如何伪造这个迁移?
以下是 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,
),
]
注意:编辑相关的迁移文件并删除 migrations.AddField fo 不起作用,因为 django 为每个 makemigrations 创建了相同的 migrations.AddField
【问题讨论】:
标签: django django-1.7 django-migrations