以下是我的模型:
class Biovariable(models.Model):
bioid = models.AutoField(primary_key=True, unique=True)
name = models.CharField(max_length=200)
description = models.CharField(max_length=2000)
units = models.ForeignKey(unit, on_delete=models.CASCADE)
def __str__(self):
return self.name
class Biovariable_data(models.Model):
biovar = models.ForeignKey(Biovariable, on_delete=models.CASCADE)
value = models.CharField(max_length=2000)
evdate = models.CharField(max_length=30)
evtime = models.CharField(max_length=30)
linkedcustomer = models.ForeignKey(customer, on_delete=models.CASCADE)
linkeddoctor = models.ForeignKey(doctor, on_delete=models.CASCADE)
linkedclinic = models.ForeignKey(Clinic, on_delete=models.CASCADE)
class Meta:
unique_together = [
"biovar", "value", "evdate", "evtime", "linkedcustomer",
"linkeddoctor", "linkedclinic"
]
每次我运行makemigrations时,django都会不断创建新的迁移,而我不明白为什么。
joel@hp:~/myappointments$ ./manage.py makemigrations
Migrations for 'appointments':
appointments/migrations/0010_auto_20190310_2138.py
- Add field dob to customer
- Alter field biovar on biovariable_data
joel@hp:~/myappointments$ ./manage.py migrate
Operations to perform:
Apply all migrations: admin, appointments, auth, clinic, contenttypes, sessions
Running migrations:
Applying appointments.0010_auto_20190310_2138... OK
joel@hp:~/myappointments$ ./manage.py makemigrations
Migrations for 'appointments':
appointments/migrations/0011_auto_20190310_2139.py
- Alter field biovar on biovariable_data
joel@hp:~/myappointments$ ./manage.py makemigrations
Migrations for 'appointments':
appointments/migrations/0012_auto_20190310_2139.py
- Alter field biovar on biovariable_data
joel@hp:~/myappointments$ ./manage.py migrate
Operations to perform:
Apply all migrations: admin, appointments, auth, clinic, contenttypes, sessions
Running migrations:
Applying appointments.0011_auto_20190310_2139... OK
Applying appointments.0012_auto_20190310_2139... OK
joel@hp:~/myappointments$ ./manage.py makemigrations
Migrations for 'appointments':
appointments/migrations/0013_auto_20190310_2140.py
- Alter field biovar on biovariable_data
joel@hp:~/myappointments$
其中一个迁移文件如下所示:
# Generated by Django 2.1.3 on 2019-03-10 16:09
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('appointments', '0010_auto_20190310_2138'),
]
operations = [
migrations.AlterField(
model_name='biovariable_data',
name='biovar',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='appointments.Biovariable'),
),
]
答案 0 :(得分:0)
正如评论中提到并在类似问题中记录的那样,这通常是由于模型中的某些动态变化,例如日期时间或选择集以不确定的顺序出现。
该问题还可能与较小的错字或更改有关,例如小写字符与大写字符。就我而言,我的FK的模型初始迁移的名称设置为小写字母,而不是正确的大写字母。每次我运行makemigrations
时,引用模型都会获得一个alter字段。通过简单地将名称大写来修复FK模型的初始迁移文件即可解决问题:
operations = [
migrations.CreateModel(
name='sentence',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
到
operations = [
migrations.CreateModel(
name='Sentence',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
虽然不确定小写字符首先是如何进入的,但是...
但是,在每个迁移文件中查找类似的内容可能有点困难,因此,我建议您仅删除所有迁移文件,然后重新进行makemigrations
,从头开始。
如果由于某种原因(例如,迁移已同步到git)而不愿这样做,则可以将迁移文件移动到临时位置,运行makemigrations
,然后查看是否{{ 1}}显示原始和新的初始迁移文件中不一致的内容。如果能够找到问题,请还原原始迁移文件并在那里解决问题。
答案 1 :(得分:0)
我遇到了同样的问题,但是我的模型没有动态变化。这是在更改相关模型的名称后发生的。 (作为参考,这是我通过“注册”重命名为“注册”而得的多对多模式。)
希望提供更明确的解决方案是:
# 1 - Roll back migrations
python manage.py migrate <app_name> zero>
# 2 - Delete the migration files
# 3 - Make a new migration
python manage.py makemigrations <app_name>