사용자 지정 프로필 및 태그 만들기 | Django CMS 빌딩 By shriekdj

이제 사용자 프로필과 블로그 태그인 CMS용 새 모델 2개를 만들려고 하지만 그 전에 시리즈 중에 GitHub 리포지토리에서 만든 일부 재구성을 말하고 싶습니다.

Django 프로젝트의 이름을 dj_admin에서 config로 변경했습니다. 프로젝트를 이해하고 실행하는 데 정확해야 하기 때문입니다. save() 기능은 프로젝트를 마이그레이션하는 동안 일부 오류를 생성했기 때문입니다.

이제 Django의 Post Model가 이렇게 생겼습니다.

# Create your models here.
class Post(models.Model):
    id = models.BigAutoField(primary_key=True)
    title = models.CharField(verbose_name='title', max_length=255, null=False)
    content = models.TextField(verbose_name='content', null=False, blank=True)
    created_at = models.DateTimeField(verbose_name='created_at',auto_now=True, auto_created=True, null=False, blank=False)
    published_at = models.DateTimeField(verbose_name='published_at',null=True)
    updated_at = models.DateTimeField(verbose_name='updated_at',null=True)
    slug = models.SlugField(verbose_name='slug', max_length=50, unique=True)

블로그 게시물 모델을 생성한 후에는 작성자/사용자 프로필 모델이 필요하며 이 모델이 게시물 모델보다 우수해야 함을 알아야 합니다.

사용자 프로필 생성을 위해 Django With slug 필드의 Auth User Model을 가져와 블로그에서 사용하기 위해 Post Model의 Upside 코드를 작성합니다.

from django.conf import settings
class Profile(models.Model):
    user = models.OneToOneField(
        settings.AUTH_USER_MODEL,
        on_delete=models.PROTECT,
    )
    website = models.URLField(blank=True)
    bio = models.CharField(max_length=240, blank=True)

    def __str__(self):
        return self.user.get_username()

여기에 프로필 삭제를 방지하기 위해 random_words()를 추가했습니다.

또한 Post Modelone-to-one 사이의 Post Model 앱에 on_delete=models.PROTECT가 추가되었습니다.

class Tag(models.Model):
    name = models.CharField(max_length=50, unique=True, null=False)
    slug = models.SlugField(verbose_name='slug', max_length=50, unique=True)

    def __str__(self) -> str:
        return self.name

또한 Tag Model , blog , Profile Model 로 명명된 Post Model 에 몇 가지 새 필드를 추가했으며 Post Modelsubtitle ( 게시물에 대해 한 명의 저자만 고려함 ) 및 meta_description 를 다음과 같이 추가했습니다. is_published 많은 게시물이 태그를 가질 수 있고 그 반대도 가능하기 때문입니다.

포스트 모델을 업데이트한 후 아래와 같이 표시됩니다.

# Create your models here.
class Post(models.Model):
    id = models.BigAutoField(primary_key=True)
    title = models.CharField(verbose_name='title', max_length=255, null=False)
    subtitle = models.CharField(max_length=255, blank=True)
    content = models.TextField(verbose_name='content', null=False, blank=True)
    meta_description = models.CharField(max_length=150, blank=True)
    created_at = models.DateTimeField(verbose_name='created_at',auto_now=True, auto_created=True, null=False, blank=False)
    updated_at = models.DateTimeField(verbose_name='updated_at',null=True)
    published_at = models.DateTimeField(verbose_name='published_at',null=True, blank=True)
    is_published = models.BooleanField(verbose_name='is_published', default=False)
    slug = models.SlugField(verbose_name='slug', max_length=50, unique=True)

    author = models.ForeignKey(Profile, on_delete=models.PROTECT, default=None)
    tags = models.ManyToManyField(Tag, blank=True)

또한 아래와 같이 블로그에 업데이트author가 필요합니다.

from django.contrib import admin

# Register your models here.
from blog.models import Profile, Post, Tag

@admin.register(Profile)
class ProfileAdmin(admin.ModelAdmin):
    model = Profile

@admin.register(Tag)
class TagAdmin(admin.ModelAdmin):
    model = Tag

@admin.register(Post)
class PostAdmin(admin.ModelAdmin):
    model = Post

    list_display = (
        "id",
        "title",
        "subtitle",
        "slug",
        "published_at",
        "is_published",
    )
    list_filter = (
        "is_published",
        "published_at",
    )
    list_editable = (
        "title",
        "subtitle",
        "slug",
        "published_at",
        "is_published",
    )
    search_fields = (
        "title",
        "subtitle",
        "slug",
        "body",
    )
    prepopulated_fields = {
        "slug": (
            "title",
            "subtitle",
        )
    }
    date_hierarchy = "published_at"
    save_on_top = True

또한 관리자 패널의 추가 게시물 아래 스크린샷



다음은 내 GitHub Repo에 대한 링크입니다.


shriekdj / shriekdj_cms






django에서 shriekdj_cms 빌드




View on GitHub

좋은 웹페이지 즐겨찾기