اضافه کردن فیلد در مدل
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()
همانطور که می بینید، ما می خواهیم phone
و joined_date
را به مدل عضو خود اضافه کنیم.
این یک تغییر در ساختار مدل است و بنابراین باید یک مهاجرت یا Migration انجام دهیم تا به جنگو بگوییم که باید پایگاه داده را به روز کند:
py manage.py makemigrations members
که، در مورد من، منجر به یک اعلان می شود، زیرا من سعی می کنم فیلدهایی را که مجاز به تهی نیستند، به جدولی که قبلاً حاوی رکوردها است اضافه کنم.
همانطور که می بینید، جنگو می پرسد که آیا می خواهم فیلدها را با یک مقدار مشخص ارائه دهم یا اینکه می خواهم مهاجرت را متوقف کنم و آن را در مدل برطرف کنم:
py manage.py makemigrations members
You are trying to add a non-nullable field 'joined_date' to members without a default; we can't do that (the database needs something to populate existing rows).
Please select a fix:
1) Provide a one-off default now (will be set on all existing rows with a null value for this column)
2) Quit, and let me add a default in models.py
Select an option:
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)
و بار دیگر migration را انجام دهید:
py manage.py makemigrations members
که نتیجه آن این خواهد بود:
Migrations for 'members':
members\migrations\0002_member_joined_date_member_phone.py
- Add field joined_date to member
- Add field phone to member
دستور migrate را اجرا کنید:
py manage.py migrate
که منجر به این خروجی می شود:
Operations to perform:
Apply all migrations: admin, auth, contenttypes, members, sessions
Running migrations:
Applying members.0002_member_joined_date_member_phone... OK
(myworld) C:\Users\Your Name\myworld\my_tennis_club>
درج داده
میتوانیم با همان رویکردی که در فصل بهروزرسانی دادهها انجام دادیم، دادهها را در دو فیلد جدید وارد کنیم:
ابتدا وارد مفسر پایتون می شویم:
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
Type "help", "copyright", "credits" or "license" for more information.
(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()
نتیجه باید به این صورت باشد: