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 폼에서 아래와 같이 잘 뜨는 것을 볼 수 있다.