Today I Learned/django

장고 (django) model multiple select choices (항목 여러개 선택하는 모델 만들기)

하나719 2023. 8. 23. 15:13
반응형

모델에서 선택지 필드를 만들 수 있는데, 단일 선택이 아닌 다중 선택이 가능하도록 변경한 내용을 남겨두려고 한다.

 

https://pypi.org/project/django-multiselectfield/

 

django-multiselectfield

Django multiple select field

pypi.org

 

파이썬의 django-multiselectfield 패키지를 사용했다.

 

[변경 전 코드]

from django.contrib.auth.models import User
from django.db import models

# Create your models here.
class Routine(models.Model):

    days_of_week = (
        (0, 'Mon'),
        (1, 'Tue'),
        (2, 'Wed'),
        (3, 'Thu'),
        (4, 'Fri'),
        (5, 'Sat'),
        (6, 'sun'),
    )

    #user = models.ForeignKey(User, on_delete=models.CASCADE)
    title = models.CharField(max_length = 200, blank=False, null=False)
    created_at = models.DateTimeField(auto_now_add=True)
    edit_at = models.DateTimeField(auto_now=True)
    start_at = models.DateTimeField()
    end_at = models.DateTimeField()
    
    #변경 해줄 필드
    days = models.Charfield(choices=days_of_week ,max_length = 1)

days 필드는 요일을 선택할 수 있는 필드인데, 현재는 단일 선택밖에 되지않는다. 이 필드를 다중 선택으로 변경해주려고 한다.

 

1. django-multiselectfield 패키지 설치

$ pip install django-multiselectfield

 

2. 코드 수정

최대 7개까지 선택이 가능하므로, max_choices = 7 , max_length=7 로 설정해주었다. 

패키지를 import 하고 models.Charfields -> MultiSelectField로 변경해주었다. 

from django.contrib.auth.models import User
from django.db import models
from multiselectfield import MultiSelectField

# Create your models here.
class Routine(models.Model):

    days_of_week = (
        (0, 'Mon'),
        (1, 'Tue'),
        (2, 'Wed'),
        (3, 'Thu'),
        (4, 'Fri'),
        (5, 'Sat'),
        (6, 'sun'),
    )

	....
    
    # 수정한 부분
    days = MultiSelectField(choices=days_of_week , max_length=7, max_choices=7)

3. 마이그레이션

모델이 변경되었기때문에 마이그레이션을 해준다음 어드민에서 확인해보면 다중 선택이 가능해진것을 확인할 수 있다. 

반응형