gpt4 book ai didi

python - Django:将新外键添加到现有模型,默认值为同一模型中的另一个外键

转载 作者:行者123 更新时间:2023-11-29 12:50:31 24 4
gpt4 key购买 nike

我最近开始使用Django,所以请耐心等待。我有一个带有 2 个外键的模型

类应用程序(模型。模型):
assessment_owner = models.ForeignKey(User, related_name='assessment_owner')
creator = models.ForeignKey(User, related_name='creator')

我正在尝试将名为 tech_lead 的新外键添加到同一模型,tech_lead 的默认值应为 assessment_owner。稍后,我可以使用数据加载更新 tech_lead 的值,但最初它应该是评估所有者。

使用以下代码片段,Django 在进行迁移时要求提供默认值,并在所有地方分配相同的 tech_lead。我想通过代码为 tech_lead 定义默认值,简单的默认属性不起作用。我曾尝试使用信号 pre_save 和 post_save 但没有成功。

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 为 NULL,即:

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com