[REAL Python – Django] – “Django – 3번째 카테고리에만 글을 쓸 수 있도록 지정하기”

[REAL Python – Django] – “Django – 3번째 카테고리에만 글을 쓸 수 있도록 지정하기”

5월 13, 2022

구현하고 싶은 것

현재 만드는 블로그에서는 3차 카테고리까지만 URL패턴이 지정되어 있습니다. 어드민 페이지에서 포스트를 작성할 때에 최종 카테고리(3차 카테고리)에만 글을 작성할 수 있도록 하고, 카테고리를 추가할 때에 해당 카테고리가 포스트를 쓸 수 있는 카테고리인지를 판별하는 것을 구현하려고 합니다.

Category 클래스에 is_postable 불리언 필드 추가하기

해당 코드를 Category 모델에 추가해 준다.

기본적으로 카테고리가 포스트를 쓸 수 있는 상태인지, 아닌지를 판별하는 불리언필드가 필요합니다.

Post 클래스에 limit_choices_to 옵션 추가

위처럼 딕셔너리 형태로 코드를 작성하면, 카테고리의 “is_postable” 이라는 필드가 True인 것만 뽑아내 어드민 페이지에 보여주겠다는 것입니다. 실제로 위의 두 작업을 수행한 후, is_postable 필드를 True 로 저장한 이후 포스트를 새로 작성해 봅시다. 그러면 True로 설정한 카테고리만 선택 가능하게끔 설정된 것을 알 수 있습니다.

카테고리를 저장할 때에, 최종 카테고리만 is_postable 필드가 True로 저장되도록 하기

    def save(self, *args, **kwargs):
        try:
            # 부모의 부모 카테고리가 존재하고, 부모의 부모의 부모 카테고리가 존재하지 않으면 -> 3차 카테고리임
            if self.parent.parent and not self.parent.parent.parent:
                self.is_postable = True
            else:
                self.is_postable = False
        except AttributeError:
            self.is_postable = False
        super(Category,self).save(*args, **kwargs)

save() 메서드를 오버라이딩했는데, 만약 3차 카테고리인 경우 True로, 아닌 경우에는 False로 저장되도록 하였습니다. 만약 1차 카테고리인 경우 부모 카테고리가 존재하지 않으므로 – AttributeError가 발생하기 때문에, 기본값인 False로 지정되게끔 했습니다!

잘 작동하는지 보겠습니다!

하나의 카테고리를 추가해 보겠습니다.
카테고리가 잘 생성되었고, 1차 카테고리이므로 포스트 작성 여부는 False로 되어 있는 것을 잘 확인할 수 있습니다.

마찬가지로 4차 카테고리(나중에 4차 카테고리를 만들지 못하도록 해 보겠습니다.) 까지 생성을 해 보면, 3차 카테고리에만 작성이 가능한 True가 저장된 것을 볼 수 있네요.

현재 구조.

만약 새 포스트를 작성하려고 한다면, 카테고리를 선택하는 콤보박스에 blog, mall, enviroment, 3rdcategory 만 나타나야 합니다.

성공!

의도했던 대로 3차 카테고리인 것들만 잘 나타나는 것을 볼 수 있습니다. 오늘의 구현 성공!!

2 Comments

  1. 그레이드승민 2022-05-13 at 9:47 오후 - Reply

    잘보고갑니다

Leave A Comment

Avada Programmer

Hello! We are a group of skilled developers and programmers.

Hello! We are a group of skilled developers and programmers.

We have experience in working with different platforms, systems, and devices to create products that are compatible and accessible.