我最近开始使用Django,所以请耐心点。我有一个带两个外键的模型class Application(models.Model): assessment_owner = models.ForeignKey(User, related_name='assessment_owner') creator = models.ForeignKey(User, related_name='creator')
我正在尝试将名为tech_lead的新外键添加到同一模型中,tech_lead的默认值应为assessment_owner。稍后,我可以使用数据加载更新tech_lead的值,但最初它应该是assessment owner。
使用下面的代码片段,Django在进行迁移时要求一个默认值,并在任何地方分配相同的tech_lead。我想为tech_lead-through代码定义默认值,而简单的默认属性不起作用。我试过在没有运气的情况下使用预存和后存信号。
class Application(models.Model):
assessment_owner = models.ForeignKey(User, related_name='assessment_owner')
creator = models.ForeignKey(User, related_name='creator')
tech_lead = models.ForeignKey(User, related_name='tech_lead')
我正在使用Django 1.11.3和postgreSQL。
迁移成功,具有一次性默认值。
错误堆栈-
Env details
error
error
提前谢谢。
最佳答案
tech_lead = models.ForeignKey(User, related_name='tech_lead')
由于数据库中已填充了Application
实例,因此会破坏完整性。如果要向方案中添加不可为空的FK,则应指定默认值。否则,如果不能提供默认值,则应考虑允许tech_lead
为空,即:tech_lead = models.ForeignKey(User, related_name='tech_lead', null=True)
然后使用data migration用所需的值填充字段:
from django.db import migrations
def populate_tech_lead(apps, schema_editor):
Application = apps.get_model('yourappname', 'Application')
for application in Application.objects.all():
application.tech_lead = application.assessment_owner
application.save()
class Migration(migrations.Migration):
dependencies = [
('yourappname', '0001_initial'),
]
operations = [
migrations.RunPython(populate_tech_lead),
]
然后从字段中删除
null=True
:tech_lead = models.ForeignKey(User, related_name='tech_lead')
关于python - Django:将新外键添加到现有模型中,并将默认值作为同一模型中的另一个外键,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55238540/