Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Django에서 국가(Country) 필드를 만드는 방법

폼이나 데이터베이스에 위치 정보를 담는 필드를 추가해야 할 때 CharField를 사용할 수도 있지만, 이는 그다지 좋은 방법이 아닙니다. Django에는 국가 필드를 손쉽게 구현할 수 있게 해주는 서드파티 패키지인 django-countries가 있습니다. 이 글에서는 django-countries를 활용해 Django에 국가(Country) 필드를 추가하는 방법을 단계별로 살펴보겠습니다.

사전 준비

먼저 Django 프로젝트와 앱을 생성합니다. 그다음 앱을 INSTALLED_APPS에 등록하고 URL 설정을 마쳐주세요.

이제 django-countries 모듈을 설치합니다:

pip install django-countries

settings.py 파일에 다음 코드를 추가합니다:

INSTALLED_APPS += [ 'django_countries']

예제

1. urls.py 설정

앱의 urls.py 파일입니다:

from django.urls import path
from . import views

urlpatterns = [
    path('', views.home, name="home"),
]

먼저 위와 같이 URL 라우팅을 설정합니다.

2. views.py 작성

views.py 파일입니다:

from django.shortcuts import render
from django import forms
from .models import Data
class SalaryForm(forms.ModelForm):
    class Meta:
        model=Data
        fields="__all__"
def home(request):
    if request.method=='POST':
        form=SalaryForm(request.POST)
        if form.is_valid():
            form.save()

    else:
        form=SalaryForm()
    return render(request,'home.html',{'form':form})

여기서는 ModelForm을 기반으로 폼을 하나 생성하고, 뷰의 GET 요청 핸들러에서 해당 폼을 렌더링했습니다. POST 요청이 들어오면 유효성 검사를 통과한 폼 데이터를 저장하도록 처리했습니다.

3. 템플릿 작성

앱 디렉터리 안에 templates 폴더를 만들고, 그 안에 home.html 파일을 생성합니다. home.html의 내용은 다음과 같습니다:

<!DOCTYPE html>
<html>
    <head>
        <title>
            TUT
        </title>
        <style>

        </style>
    </head>
    <body>
        <h2>FORM</h2>
        <form action="/" method="post">
            {% csrf_token %}
            {{ form }}
            <input type="submit" value="Submit">
        </form>
    </body>
</html>

위 코드는 폼을 화면에 보여주는 프런트엔드 HTML입니다.

4. models.py에 국가 필드 추가

models.py 파일입니다:

from django.db import models
from django_countries.fields import CountryField

# Create your models here.
class Data(models.Model):
    Name=models.CharField(max_length=100)
    salary = models.CharField(max_length=20)
    country_of_work = CountryField(blank=True)

여기서는 국가 데이터를 저장할 수 있는 country 필드를 포함한 모델을 생성했습니다. CountryField를 사용하면 전 세계 국가 목록이 드롭다운 형태로 자동으로 제공되므로, 일일이 국가명을 입력받는 CharField보다 훨씬 편리하고 데이터의 일관성도 유지할 수 있습니다.

마이그레이션 실행

모델 작성이 끝났다면 아래 명령어로 마이그레이션을 생성하고 데이터베이스에 적용합니다:

python manage.py makemigrations
python manage.py migrate

이것으로 모든 설정이 완료되었습니다. 이제 개발 서버를 실행하고 브라우저에서 페이지를 열어 결과를 확인해 보세요.

출력 결과

Django에서 국가(Country) 필드를 만드는 방법