菜单
×
   ❮   
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 提供支持