Django版本:4.1.2
后升沉模型中定义如下表:
class Tasks(models.Model):
name_text = models.CharField(max_length=200)
duration_int = models.IntegerField(default=1)
...
定义了下面两个表:
class Metiers(models.Model):
name_text = models.CharField(max_length=50)
...
class TasksProperties(models.Model):
task = models.ForeignKey(Tasks, on_delete=models.CASCADE, related_name='task_relation')
metier = models.ForeignKey(Metiers, on_delete=models.CASCADE, related_name='metier_relation')
...
在执行迁移时,不会在SQL表中创建元数据,而是创建其余的元数据:
class Migration(migrations.Migration):
dependencies = [
('simo', '0009_alter_specialdays_day_date'),
]
operations = [
migrations.CreateModel(
name='Metiers',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name_text', models.CharField(max_length=50)),
],
),
migrations.CreateModel(
name='TasksProperties',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('workload_mh', models.IntegerField(default=8)),
('task', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='simo.tasks')),
],
),
]
有没有什么原因,为什么梅蒂埃没有被考虑在内?
2022年11月27日更新:
所以,它仍然不清楚为什么它不工作,因为我相信结构是正确的;因此,我尝试了一些错误,最终迁移完成,尽管原因并不明显。请参见下面的解决方案:
步骤1)从模型中删除迁移的TaskProperties类并执行迁移
步骤2)models.py已更新为
class TasksProperties(models.Model):
workload_mh = models.IntegerField(default=8)
metier = models.ForeignKey('Metiers', on_delete=models.CASCADE, related_name='metier_relation')
这导致迁移后,作为外键的“元”在SQL中可见。
步骤3)添加“任务”时,迁移会忽略以下问题:
class TasksProperties(models.Model):
workload_mh = models.IntegerField(default=8)
metier = models.ForeignKey('Metiers', on_delete=models.CASCADE, related_name='metier_relation')
task = models.ForeignKey(Tasks, on_delete=models.CASCADE, related_name='task_relation')
- 在不指定默认值的情况下,无法将不可为空的字段“task”添加到tasksproperties。这是因为数据库需要填充现有行。请选择修复方法:
1.立即提供一次性默认值(将在此列为空值的所有现有行上设置)
1.退出并在models.py中手动定义默认值。选择一个选项:2个 *
然后,在更新model.py并将默认值default=0添加到“任务”后,迁移成功:
class TasksProperties(models.Model):
workload_mh = models.IntegerField(default=8)
metier = models.ForeignKey('Metiers', on_delete=models.CASCADE, related_name='metier_relation')
task = models.ForeignKey(Tasks, on_delete=models.CASCADE, related_name='task_relation', default=0)
为什么需要此“默认”值?
1条答案
按热度按时间6yjfywim1#
请尝试以下三个命令:
看看能不能解决