第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

Django:將新外鍵添加到現(xiàn)有模型中,默認(rèn)值作為來自同一模型的另一個(gè)外鍵

Django:將新外鍵添加到現(xiàn)有模型中,默認(rèn)值作為來自同一模型的另一個(gè)外鍵

森林海 2021-12-09 15:42:38
我最近開始使用 Django,所以請(qǐng)耐心等待。我有一個(gè)帶有 2 個(gè)外鍵的模型class Application(models.Model):    assessment_owner = models.ForeignKey(User, related_name='assessment_owner')    creator = models.ForeignKey(User, related_name='creator')我正在嘗試將名為 tech_lead 的新外鍵添加到同一模型中,tech_lead 的默認(rèn)值應(yīng)為 Assessment_owner。稍后,我可以使用數(shù)據(jù)加載更新 tech_lead 的值,但最初它應(yīng)該是評(píng)估所有者。使用以下代碼片段,Django 在進(jìn)行遷移時(shí)要求默認(rèn)值,并在各處分配相同的 tech_lead。我想通過代碼為 tech_lead 定義默認(rèn)值,簡(jiǎn)單的默認(rèn)屬性不起作用。我嘗試過使用信號(hào) 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。使用一次性默認(rèn)值遷移成功。錯(cuò)誤堆棧 -
查看完整描述

2 回答

?
翻閱古今

TA貢獻(xiàn)1780條經(jīng)驗(yàn) 獲得超5個(gè)贊

tech_lead = models.ForeignKey(User, related_name='tech_lead')


破壞完整性,因?yàn)槟臄?shù)據(jù)庫已經(jīng)填充了Application實(shí)例。如果你想在你的方案中添加一個(gè)不可為空的 FK,你應(yīng)該指定默認(rèn)值。否則,如果您不能提供默認(rèn)值,則應(yīng)考慮允許tech_lead為 NULL,即:


tech_lead = models.ForeignKey(User, related_name='tech_lead', null=True)


然后使用數(shù)據(jù)遷移用您想要的值填充字段:


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')


查看完整回答
反對(duì) 回復(fù) 2021-12-09
?
人到中年有點(diǎn)甜

TA貢獻(xiàn)1895條經(jīng)驗(yàn) 獲得超7個(gè)贊

步驟 1. 添加null=True到tech_lead字段為


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', null=True)

Step 2. create migration file by Step 3. migrate the db Step 4. open django shell, Step 5. 運(yùn)行以下腳本python manage.py makemigrations


python manage.py migrate


python manage.py shell



from your_app.models import Application

from django.db.models.expressions import F


Application.objects.filter(tech_lead__isnull=True).update(tech_lead=F('assessment_owner'))



查看完整回答
反對(duì) 回復(fù) 2021-12-09
  • 2 回答
  • 0 關(guān)注
  • 211 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)