Modelni yangilash


ULASHISH

Modelga maydonlar qo‘shish

Jadval yaratilgandan keyin unga maydon qo‘shish uchun models.py faylini oching va o‘zgartirishlaringizni kiriting:

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()

Ko‘rib turganingizdek, Member modelimizga phone va joined_date maydonlarini qo‘shmoqchimiz.

Bu model tuzilmasidagi o‘zgarish, shuning uchun Django’ga ma’lumotlar bazasini yangilash kerakligini bildirish maqsadida migratsiya yaratishimiz kerak:

python manage.py makemigrations members

Eslatma: Buyruqni bajarishdan oldin virtual muhitga qaytganingizga ishonch hosil qiling.

Yuqoridagi buyruq sizdan tanlov qilishni so‘raydi (prompt), chunki biz allaqachon yozuvlar mavjud bo‘lgan jadvalga null bo‘lishiga ruxsat berilmagan maydonlarni qo‘shmoqchimiz.

Ko‘rib turganingizdek, Django maydonlarga muayyan qiymat berishni xohlaymizmi yoki migratsiyani to‘xtatib, muammoni modelda tuzatishni xohlaymizmi, deb so‘raydi:

python 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:

Men 2-variantni tanlayman, models.py faylini qayta ochaman va ikkala yangi maydon uchun NULL qiymatlarga ruxsat beraman:

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)

Va migratsiyani yana bir bor yarating:

python manage.py makemigrations members

Natija quyidagicha bo‘ladi:

Migrations for 'members':   members\migrations\0002_member_joined_date_member_phone.py     - Add field joined_date to member     - Add field phone to member

migrate buyrug‘ini bajaring:

python manage.py migrate

Buning natijasi quyidagicha bo‘ladi:

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>


Ma’lumot qo‘shish

Ikki yangi maydonga ma’lumotni Ma’lumotni yangilash bobida qilganimiz kabi usulda qo‘shishimiz mumkin:

Avval Python shell’ga kiramiz:

python manage.py shell

Endi shell ichidamiz, natija taxminan quyidagicha bo‘lishi kerak:

Python 3.13.2 (tags/v3.13.2:4f8bb39, Feb 4 2025, 15:23:48) [MSC v.1942 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "license" for more information. (InteractiveConsole) >>>

Pastda, uchta >>> belgisidan keyin quyidagini yozing (har bir qatordan keyin [enter] tugmasini bosing):

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

Bu Member modeliga telefon raqami va sanani qo‘shadi — hech bo‘lmaganda birinchi yozuv uchun; qolgan to‘rtta yozuv hozircha bo‘sh qoladi. Ular bilan darslikning keyingi qismida shug‘ullanamiz.

Member jadvali yangilanganini tekshirish uchun quyidagi buyruqni bajaring:

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

Natija quyidagicha ko‘rinishi kerak:

<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 Pathfinder

Yutuqlaringizni kuzating – bu bepul!