بروزرسانی Model جنگو

اضافه کردن فیلد در مدل

برای افزودن یک فیلد به جدول پس از ایجاد آن، فایل 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:
				
			
من گزینه 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)
				
			

و بار دیگر 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()
				
			

نتیجه باید به این صورت باشد:

				
					<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}]>