카테고리

·2023년 9월 26일
0

웹개발 종합

목록 보기
12/23

article 모델에 미리 카테고리를 지정해서 글을 올릴 때 카테고리를 같이 올릴 수 있게 하려고 한다.

우선 카테고리 모델을 따로 만들어준다.

article/model.py

class Category(models.Model):
    name = models.CharField(max_length=100)
    # 카테고리 이름으로 나타내기
    def __str__(self):
        return self.name
	# 지정하지 않으면 복수형이 Categorys 라고 뜬다
    class Meta:
        verbose_name_plural = 'Categories'

카테고리는 이름만 넣어줄 것이므로 캐릭터필드 하나만 해줬다.

그리고 Article 에 카테고리를 외래키로 넣어준다.

class Article(models.Model):
    author = models.ForeignKey(User, on_delete=models.CASCADE)
    title = models.TextField(max_length=100)
    content = models.TextField()
    image = models.ImageField(blank=True, upload_to="media/%Y/%m")
    updated_at = models.DateField(auto_now=True)
    created_at = models.DateField(auto_now_add=True)
    likes = models.ManyToManyField(User, related_name="like_articles", blank=True)
    category = models.ForeignKey(Category, blank=True, null=True, on_delete=models.SET_NULL)

    def __str__(self) -> str:
        return self.title
  • 카테고리는 필수로 넣아야 하는 필드가 아니므로 blank=True 설정을 해준다.
  • 카테고리가 사라진다고 글이 같이 사라질 필요는 없으므로 null=True, on_delete=models.SET_NULL 을 통해 해당 카테고리가 삭제될 시 그 글의 카테고리는 null 이 되도록 설정해준다.

카테고리를 만들어주기 위해 admin.py 에 카테고리 모델을 등록해준다.

from django.contrib import admin
from article.models import Article, Comment, Category

# Register your models here.
admin.site.register(Category)

이제 migrate 를 해준다.

admin 페이지에서 이렇게 카테고리 등록을 해주면

article 폼에서 아래와 같이 잘 뜨는 것을 볼 수 있다.

profile
공부 중

0개의 댓글