장고 게시글 태그만들기

Pywiki
Sam (토론 | 기여)님의 2022년 5월 12일 (목) 10:54 판 (Sam님이 게시글 태그만들기 문서를 장고 게시글 태그만들기 문서로 이동했습니다)
(차이) ← 이전 판 | 최신판 (차이) | 다음 판 → (차이)
둘러보기로 가기 검색하러 가기

1 개요[편집 | 원본 편집]

게시글에 붙는 태그 만들기.

2 게시글에 태그 달기[편집 | 원본 편집]

2.1 model.py 수정[편집 | 원본 편집]

과정 설명 코드
태그모델 생성 태그모델을 만든다.

속성은 필요에 따라.

class Tag(models.Model):
    name = models.CharField(max_length=32)
    def __str__(self):
        return self.name
게시글모델 변형 게시글 모델에 태그속성을 추가한다.
class Posting(models.Model):
    ...
    tag = models.ManyToManyField('Tag', null=True, blank=True)  # 태그 모델과 연결.
    ...
admin.py 수정 관리자창에서 볼 수 있게 수정해주자.
class TagAdmin(admin.ModelAdmin):
    list_display = ('name',)
admin.site.register(Tag, TagAdmin)
DB반영 app에 대하여 DB에 반영한다. python manage.py makemigrations app

python manage.py migrate app

2.2 form.py 수정[편집 | 원본 편집]

취향에 따라 다르겠지만, 나는 form에 추가하지 않고 진행하겠다. post로 들어온 데이터값을 그대로 사용하고자 한다.

2.3 view.py 수정[편집 | 원본 편집]

과정 설명 코드
태그생성함수 짜기 request와 posting을 받아 태그를 생성하는 함수를 짠다.
def tag_adding(request, posting):
    tags = request.POST.get('tag').split(',')
    for tag in tags:
        if not tag:
            continue
        else:
            tag = tag.strip()  # 문자열 양쪽에 빈칸이 있을 때 이를 제거한다.
            tag_, created = Tag.objects.get_or_create(name=tag)  # created엔 새로 만들어졌는지 여부가 True로 나오고, tag_엔 그 태그가 담긴다.
            posting.tag.add(tag_)
기존 함수 변형 게시글을 만들고 수정하는 뷰를 변형한다.
        if form.is_valid():  #문제가 없으면 다음으로 진행.
            ...
            posting.save()
            tag_adding(request, posting)  # 태그 추가 함수.

2.4 template 수정[편집 | 원본 편집]

과정 설명 코드
게시글 생성 탬플릿 게시글 생성, 수정 시 태그를 입력하게 한다.
<label>태그 추가</label>
    <input type="text" class="form-control" name="tag" id="tag" placeholder="구분은 ','로 합니다.">
        {% for tag in posting.tag.all %}
        <span>
        <a href="">
        #{{ tag.name }}</a>
        {% endfor %}
추가하는 칸 아래엔 기존에 추가된 태그를 보여준다.
게시글 탬플릿 게시글에서 태그를 표시한다.
                    <!---태그 추가 부분-->
            <labe for = "tags">태그</labe>
            {% for tag in posting.tag.all %}
        <span>
                <a href="{% url 'scientific_humor:tag_info' tag.name %}">
                    #{{ tag.name }}</a>
            {% endfor %}

3 태그 삭제[편집 | 원본 편집]