НАЙКРАЩИЙ САЙТ ДЛЯ ВЕБ-РОЗРОБНИКІВ

Django Підручник

Django Головна Django Інтро Django Почати навчання Створення віртуального середовища Встановити Django Django Створити проєкт Django Створити додаток Django Представлення Django URL Django Шаблони Django Моделі Django Вставити дані Django Оновити дані Django Видалити дані Django Оновити модель

Відображення даних

Підготувати шаблон і переглянути Додати посилання на деталі Додати головний шаблон Додати головну Index сторінку Django 404 Шаблон Додати Test перегляд

Адмін

Django Адмін Створити користувача Включити моделі Відображення списку установок Оновити учасників Додати учасників Видалити учасників

Django Синтаксис

Django Змінні Django Теги Django If Else Django Цикл For Django Коментар Django Include

QuerySets

QuerySet Інтро QuerySet Get QuerySet Фільтр QuerySet Order By

Статичні файли

Додати статичні файли Встановити WhiteNoise Зібрати статичні файли Додати глобальні статичні файли Додати стилі до проєкту

PostgreSQL

PostgreSQL Інтро Створити обліковий запис AWS Створити бази даних у RDS Підключитися до бази даних Додати учасників

Розгортання Django

Elastic Beanstalk (EB) Створити requirements.txt Створити django.config Створити .zip файл Розгорнути із EB Оновити проєкт

Більше Django

Додати Slug Field Додати Bootstrap 5

Django Довідники

Довідник тегів шаблону Довідник фільтра Довідник Пошуку полів

Django Вправи

Django Компілятор Django Вправи Django Вікторина Django Сервер Django Сертифікат

Django. Уроки для початківців

En Es De

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

Як бачите, ми хочемо додати phone і joined_date до нашої моделі учасників.

Це зміна в структурі моделі, тому ми повинні виконати міграцію, щоб повідомити Django, що він має оновити базу даних:

py manage.py makemigrations members

У моєму випадку це призведе до підказки, оскільки я намагаюся додати поля, які не мають значення null, до таблиці, яка вже містить записи.

Як бачите, Django запитує, чи хочу я надати полям певне значення, чи я хочу зупинити міграцію та виправити це в моделі:

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)

І зробити міграцію ще раз:

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

Виконати команду міграції:

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>

Вставити дані

Ми можемо вставити дані до двох нових полів за допомогою того самого підходу, що й у розділі Django Оновлення даних:

Спочатку ми входимо в оболонку Python:

py manage.py 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.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}]>


Коментарі