본문 바로가기

python31

🗄️ Django & SQL에서의 CASCADE와 NOT NULL 이해하기 1. CASCADE란?CASCADE는 외래 키(Foreign Key) 제약 조건에서 부모 객체가 삭제될 때, 자식 객체를 어떻게 처리할지를 결정하는 옵션 중 하나입니다.특히 on_delete=models.CASCADE는 부모가 삭제되면 해당 부모를 참조하는 모든 자식도 함께 삭제하라는 의미입니다.📌 Django 예시from django.db import modelsclass Author(models.Model): name = models.CharField(max_length=100)class Book(models.Model): author = models.ForeignKey( Author, on_delete=models.CASCADE # 부모 Author 삭제 시 .. 2025. 8. 5.
🧪 Python Mock 완벽 가이드 — 테스트에서 가짜 객체를 쓰는 이유 1. Mock이란?Mock은 테스트에서 진짜 객체 대신 쓰는 가짜 객체입니다.주로 외부 의존성이 큰 코드(DB, 네트워크, 파일, 시간 지연 등)를 대체하여,테스트를 빠르고, 안정적으로, 상황에 맞게 실행할 수 있게 해줍니다.“Mock은 테스트의 세계에서 배우로 등장하는 대역 배우입니다.”2. 왜 Mock을 쓰나?빠른 테스트: DB 연결, API 호출, 대기 시간 없이 실행상황 통제: 예외 발생, 특정 응답 값 등 원하는 상황 재현 가능행동 검증: 어떤 함수가 몇 번, 어떤 인자로 호출됐는지 확인 가능3. Python에서 Mock 도구Python 표준 라이브러리 unittest.mock이 제공하는 주요 기능:Mock / MagicMock → 자유롭게 속성과 메서드를 정의할 수 있는 기본 가짜 객체patc.. 2025. 8. 5.
🧪 테스트 주도 개발(TDD) 완벽 가이드 📌 1. TDD란 무엇인가?TDD(Test-Driven Development, 테스트 주도 개발)는기능을 구현하기 전에 테스트를 먼저 작성하고,그 테스트를 통과하는 코드를 만든 뒤 리팩터링하는 개발 방식입니다.한마디로, 테스트가 개발을 이끄는 방식이라고 볼 수 있습니다. 🚀🔄 2. TDD 핵심 사이클 (Red → Green → Refactor)🔴 Red – 실패하는 테스트 작성기능을 구현하기 전에 실패할 수밖에 없는 테스트 작성→ 실행하여 테스트가 실패하는지 확인🟢 Green – 테스트를 통과하는 최소한의 코드 작성가장 단순하게 테스트를 통과시키는 코드 구현→ 우선은 “통과”가 목표♻ Refactor – 코드 개선중복 제거, 가독성 향상, 구조 개선→ 리팩터링 후에도 테스트는 모두 통과해야 함?.. 2025. 8. 4.
[Django] ModelForm으로 폼을 간단히! 그런데 레이블을 잃었다... 🧩 상황Django에서 사용자 입력 폼을 만들 때 forms.Form을 쓰면 유효성 검사나 필드 구성이 번거로워요. 그래서 forms.ModelForm을 사용하면 모델 기반으로 폼을 자동 생성할 수 있어서 매우 간편합니다.class ReviewForm(forms.ModelForm): class Meta: model = Review fields = "__all__"위와 같이 쓰면 Review 모델의 모든 필드를 자동으로 폼으로 생성해줍니다. 하지만 문제는...❗ 레이블(label)이 다 영어 변수명으로 나와요!🔍 원인ModelForm은 Model 클래스에 정의된 필드 이름을 그대로 label로 사용합니다. verbose_name을 모델에서 정의하지 않으면 변수명을 그대로 .. 2025. 7. 24.
[Django] ManyToManyField 역참조 출력 오류 해결: post.tags 관련 에러 정리 Django에서 ManyToManyField를 템플릿에서 출력하려고 할 때 Internal Server Error가 발생했습니다. post.tags를 반복문으로 출력하다가 다음과 같은 에러를 만났습니다.TypeError: 'ManyRelatedManager' object is not iterable이 오류는 ManyToManyField에 대해 .all()을 호출하지 않고 템플릿에서 직접 루프를 돌리려고 할 때 발생합니다.문제 상황예를 들어, 아래와 같은 템플릿 코드가 있다고 가정해봅시다. {% for tag in post.tags %} {{ tag.caption }} {% endfor %}위 코드는 겉보기에 아무 문제가 없어 보이지만, 실제로는 post.tags는 ManyRelat.. 2025. 7. 23.
🧩 Django 관리자에서 Post 모델 꾸미기 - PostAdmin 설정하기 Django의 관리자 페이지는 ModelAdmin 클래스를 통해 다양한 설정이 가능합니다.이번 글에서는 Post 모델을 더 직관적으로 관리할 수 있도록 PostAdmin 클래스를 구성해보겠습니다.🛠 PostAdmin 코드class PostAdmin(admin.ModelAdmin): prepopulated_fields = {"slug": ("title", )} list_filter = ("author", "date", ) list_display = ("title", "author", )1️⃣ prepopulated_fieldsprepopulated_fields = {"slug": ("title", )}slug 필드가 자동으로 title 값을 기반으로 채워집니다.관리자에서 새 글을 입력할 .. 2025. 7. 23.