Menu
×
   ❮   
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) 现在提供一次性默认值(将在所有现有行上设置,该列的 null 值为该值)
 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 字段

运行迁移命令

py manage.py migrate

这将导致以下输出

要执行的操作
  应用所有迁移:admin、auth、contenttypes、members、sessions
运行迁移
  应用 members.0002_member_joined_date_member_phone... 确定

(myworld) C:\Users\您的姓名\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}]>


×

Contact Sales

If you want to use W3Schools services as an educational institution, team or enterprise, send us an e-mail:
[email protected]

Report Error

If you want to report an error, or if you want to make a suggestion, send us an e-mail:
[email protected]

W3Schools is optimized for learning and training. Examples might be simplified to improve reading and learning. Tutorials, references, and examples are constantly reviewed to avoid errors, but we cannot warrant full correctness of all content. While using W3Schools, you agree to have read and accepted our terms of use, cookie and privacy policy.

Copyright 1999-2024 by Refsnes Data. All Rights Reserved. W3Schools is Powered by W3.CSS.