選單
×
   ❮   
HTML CSS JAVASCRIPT SQL PYTHON JAVA PHP HOW TO W3.CSS C C++ C# BOOTSTRAP REACT MYSQL JQUERY EXCEL XML DJANGO NUMPY PANDAS NODEJS R TYPESCRIPT ANGULAR GIT POSTGRESQL MONGODB ASP AI GO KOTLIN SASS VUE DSA GEN AI SCIPY AWS CYBERSECURITY DATA SCIENCE
     ❯   

Django 更新模型


在模型中新增欄位

要在表建立後向其新增欄位,請開啟 models.py 檔案,並進行更改。

my_tennis_club/members/models.py:

from django.db import models

class Member(models.Model):
  firstname = models.CharField(max_length=255)
  lastname = models.CharField(max_length=255)
  phone = models.IntegerField()
  joined_date = models.DateField()

如您所見,我們想向我們的 Member 模型新增 phonejoined_date

這是模型結構的更改,因此我們必須進行遷移,告訴 Django 它需要更新資料庫。

py manage.py makemigrations members

在我的情況下,這將導致一個提示,因為我試圖向一個已經包含記錄的表中新增不允許為空的欄位。

如您所見,Django 詢問我是要為這些欄位提供一個特定的值,還是要停止遷移並在模型中修復它。

py manage.py makemigrations members
您正在嘗試向 members 新增一個非空欄位 'joined_date' 而沒有預設值;我們不能這樣做(資料庫需要一些東西來填充現有行)。
請選擇一個解決方案:
1) 現在提供一個一次性預設值(將設定在所有現有行中此列為空值的行上)
2) 退出,讓我在 models.py 中新增一個預設值
選擇一個選項:

我將選擇選項 2,並再次開啟 models.py 檔案,併為這兩個新欄位允許 NULL 值。

my_tennis_club/members/models.py:

from django.db import models

class Member(models.Model):
  firstname = models.CharField(max_length=255)
  lastname = models.CharField(max_length=255)
  phone = models.IntegerField(null=True)
  joined_date = models.DateField(null=True)

然後再次進行遷移。

py manage.py makemigrations members

這將產生以下結果:

members 的遷移:
members\migrations\0002_member_joined_date_member_phone.py
- 向 member 新增欄位 joined_date
- 向 member 新增欄位 phone

執行 migrate 命令:

py manage.py migrate

這將產生以下輸出:

要執行的操作
  應用所有遷移:admin, auth, contenttypes, members, sessions
正在執行遷移
應用 members.0002_member_joined_date_member_phone... OK

(myworld) C:\Users\Your Name\myworld\my_tennis_club>

插入資料

我們可以使用與更新資料章節中相同的方法向這兩個新欄位插入資料。

首先我們進入 Python Shell:

py manage.py shell

現在我們進入了 shell,結果應該類似於這樣:

Python 3.9.2 (tags/v3.9.2:1a79785, Feb 19 2021, 13:44:55) [MSC v.1928 64 bit (AMD64)] on win32
鍵入 "help"、"copyright"、"credits" 或 "license" 以獲取更多資訊。
(InteractiveConsole)
>>>

在底部的三個 >>> 之後,輸入以下內容(每行輸入後按 [enter]):

>>> from members.models import Member
>>> x = Member.objects.all()[0]
>>> x.phone = 5551234
>>> x.joined_date = '2022-01-05'
>>> x.save()

這將在 Member 模型中插入一個電話號碼和一個日期,至少對於第一條記錄是這樣,其餘四條記錄暫時留空。我們將在本教程的後面處理它們。

執行此命令以檢視 Member 表是否已更新:

>>> Member.objects.all().values()

結果應該看起來像這樣

<QuerySet [
{'id': 1, 'firstname': 'Emil', 'lastname': 'Refsnes', 'phone': 5551234, 'joined_date': datetime.date(2022, 1, 5)},
{'id': 2, 'firstname': 'Tobias', 'lastname': 'Refsnes', 'phone': None, 'joined_date': None},
{'id': 3, 'firstname': 'Linus', 'lastname': 'Refsnes', 'phone': None, 'joined_date': None},
{'id': 4, 'firstname': 'Lene', 'lastname': 'Refsnes', 'phone': None, 'joined_date': None},
{'id': 5, 'firstname': 'Stalikken', 'lastname': 'Refsnes', 'phone': None, 'joined_date': None}]>


×

聯絡銷售

如果您想將 W3Schools 服務用於教育機構、團隊或企業,請傳送電子郵件給我們
sales@w3schools.com

報告錯誤

如果您想報告錯誤,或想提出建議,請傳送電子郵件給我們
help@w3schools.com

W3Schools 經過最佳化,旨在方便學習和培訓。示例可能經過簡化,以提高閱讀和學習體驗。教程、參考資料和示例會不斷審查,以避免錯誤,但我們無法保證所有內容的完全正確性。使用 W3Schools 即表示您已閱讀並接受我們的使用條款Cookie 和隱私政策

版權所有 1999-2024 Refsnes Data。保留所有權利。W3Schools 由 W3.CSS 提供支援