簡體   English   中英

在 Django 中向模型添加外鍵時 NOT_NULL 約束失敗

[英]NOT_NULL contraint failed when adding foreign key to model in django

我正在制作一個筆記應用程序。 當我嘗試創建一個外鍵來鏈接用戶及其筆記時,我在使用時遇到錯誤

python manage.py migrate

. 我對外鍵很陌生,我查看了 Django 文檔,這就是他們創建外鍵的方式。

這是代碼:

from django.db import models

class User(models.Model):
    username = models.CharField(max_length=50)
    email = models.EmailField(max_length=50)



class Note(models.Model):
    body = models.TextField(null=True, blank=True)
    updated = models.DateTimeField(auto_now=True)
    created = models.DateTimeField(auto_now_add=True)
    author = models.ForeignKey(User, on_delete=models.CASCADE)


    def __str__(self):
        return self.body[0:50]

這是錯誤:

django.db.utils.IntegrityError: NOT NULL constraint failed: new__api_note.author_id

您的問題是數據庫中存在沒有author_id字段的現有注釋,但您沒有設置默認值,也不允許保留為空白。 因此,添加該字段是一個IntegrityError

您可以通過兩種方式解決此問題:

允許字段為空

  1. 刪除遷移文件夾中的最后一次遷移
  2. 像這樣編輯作者字段:
author = models.ForeignKey(User, on_delete=models.CASCADE, null=True)
  1. 運行 makemigrations 並遷移

為字段設置默認值

  1. 從遷移文件夾中刪除最后一次遷移。 您也可以編輯它,但簡單地刪除它是最簡單的
  2. 再次運行 makemigrations
  3. 在 make 遷移期間,它會提示您是否要為該字段提供默認值。 選擇“現在提供一個值”
  4. 鍵入models.User.objects.all().first()或其他一些現有筆記的“默認”作者
  5. 運行migrate

您還可以通過從數據庫中刪除所有現有筆記來解決問題

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM