django admin 페이지에서 다른 모델의 필드값을 drop-down 리스트로 사용하기.

Django 관리자 페이지에서 다른 모델 필드값 drop-down list로 사용하기

모델은 아래와 같다.

class Category(models.Model):
    name = models.CharField(max_length=64, unique=True)


class NetworkDevice(models.Model):
    ...
    category = models.CharField(max_length=64, null=True, blank=True, verbose_name='Category')

위의 모델에서, NetworkDevice 모델의 category 필드의 입력값을 Category 모델의 값에서 가져오기를 원하는경우, ForeignKey를 사용하면 되지만, 외래키를 사용하는경우 Category 쪽의 데이타를 삭제하는 경우 문제가 발생할 수도 있다.
그런 경우를 비롯해 외래키를 사용하지 않고 비슷한 효과를 보려면, 모델이 choices 파라메터를 튜플 타입으로 지정하면 된다.

위의 모델을 아래 처럼 수정하면, 원하는 결과를 얻을 수 있다.

class Category(models.Model):
    name = models.CharField(max_length=64, unique=True)

categories = []
for c in Category.objects.all():
    cat = (c.name, c.name)
    categories.append(cat)

class NetworkDevice(models.Model):
    ...
    category = models.CharField(max_length=64, choices=tuple(categories), null=True, blank=True, verbose_name='Category')

이제, 관리자 페이지에서 NetworkDevice를 추가 할때 아래 그림처럼 category를 선택할 수 있다.

답글 남기기

Your email address will not be published.