User
id 같은 개념?
- admin 계정 혹은 회원가입 등에서 생성 가능
- ForeignKey로 사용
- 1:N 대응 가능
to: 기준 키 설정
class ForeignKey(
to: type[_M@ForeignKey] | str,
on_delete: _OnDeleteOptions,
*,
to_field: str | None = ...,
related_name: str | None = ...,
related_query_name: str | None = ...,
limit_choices_to: _ChoicesLimit | None = ...,
parent_link: bool = ...,
db_constraint: bool = ...,
...
models.ForeignKey(on_delete=<option>): ForeignKey로 설정models.CASCADE: User가 없다면 post 자체를 없애겠다(user 삭제 -> user가 쓴 글 같이 삭제)models.SET_NULL: User가 없어도 post는 유지

# blog\models.py
from django.contrib.auth.models import User
...
class Post(models.Model):
author = models.ForeignKey(
User,
# on_delete=models.CASCADE, # User가 없다면 post 자체를 없애겠다(user 삭제 -> user가 쓴 글 같이 삭제)
on_delete=models.SET_NULL, # User가 없어도 post는 유지
null=True,
)
...
Category
post - category 1:1 대응
ForeignKey 사용
name: nameslug: category 구별에 사용하는 개별 key
unique=True: 중복을 허용하지 않도록 설정url설정
class Category(models.Model):
name = models.CharField(max_length=100)
slug = models.SlugField(max_length=100, unique=True, allow_unicode=True) # 중복 방지
def __str__(self):
return super().__str__()
def get_absolute_url(self):
return f'/blog/categories/{self.slug}/' # return url 지정
class Post(models.Model):
...
category = models.ForeignKey(Category,
# on_delete=models.CASCADE, # User가 없다면 post 자체를 없애겠다(user 삭제 -> user가 쓴 글 같이 삭제)
on_delete=models.SET_NULL, # User가 없어도 post는 유지
blank=True,
null=True,
)
...
# blog\urls.py
urlpatterns = [
...
path('categories/<str:slug>/', views.categories, name='categories'), # 127.0.0.1:8000/blog/categories/{slug}/
...
(models.Model).objects.get(slug=<slug>): return<slug>을 가진models.Model객체(models.Model).objects.filter(category=<obj>): returnmodels.Model을 가진 객체
# blog\views.py
...
def categories(request, slug):
if slug=='0':
category_posts = Post.objects.filter(category=None)
posts_category = ''
else :
posts_category = Category.objects.get(slug=slug)
category_posts = Post.objects.filter(category=posts_category)
return render(request,
template_name='blog/categories.html',
context={'category_posts':category_posts,
'category' : posts_category,
'categories' : category_total_list,
},
)
...
C
Contents
