파이썬 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 Shell을 시작한다:
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) >>> |
하단에는 >>>> 세 개 다음에 다음을 적는다(그리고 각 행에 대해 [입력]):
>>> from members.models import Member >>> x = Member.objects.all()[0] >>> x.phone = 5551234 >>> x.joined_date = '2022-01-05' >>> x.save() |
이렇게 하면 멤버 모델에 전화번호와 날짜가 들어가는데, 적어도 첫 번째 기록의 경우, 지금은 남은 네 개의 기록이 비워진다. 나중에 튜토리얼에서 다루도록 하겠다.
이 명령을 실행하여 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}]> |
이번 글에서는 파이썬 Django 모듈에서 모델의 필드를 수정하는 것에 대하여 살펴보았다.
꼭 손으로 눈으로 머리로 익히며 실습하기를 바란다.
모두 화이팅입니다.!!!
출처 : 이 글의 출처는 w3schools사이트를 참고하였으며 필자가 추가하여 정리한 글입니다.
'파이썬 > 파이썬기본문법' 카테고리의 다른 글
파이썬 Django 상세 링크 추가 (0) | 2024.02.19 |
---|---|
파이썬 Django 템플릿 준비 (0) | 2024.02.18 |
파이썬 Django 데이터 삭제 (0) | 2024.02.16 |
파이썬 Django 데이터 수정 (0) | 2024.02.15 |
파이썬 Django 데이터 삽입 (0) | 2024.02.14 |
댓글