바뀜

둘러보기로 가기 검색하러 가기
3,182 바이트 추가됨 ,  2022년 5월 10일 (화) 11:03
새 문서: == 개요 == 게시글에 붙는 태그 만들기. = 게시글에 태그 달기 = == model.py 수정 == {| class="wikitable" !과정 !설명 !코드 |- |태그모델 생성 |태그...
== 개요 ==
게시글에 붙는 태그 만들기.

= 게시글에 태그 달기 =

== model.py 수정 ==
{| class="wikitable"
!과정
!설명
!코드
|-
|태그모델 생성
|태그모델을 만든다.
속성은 필요에 따라.
|<syntaxhighlight lang="python">
class Tag(models.Model):
name = models.CharField(max_length=32)
def __str__(self):
return self.name
</syntaxhighlight>
|-
|게시글모델 변형
|게시글 모델에 태그속성을 추가한다.
|<syntaxhighlight lang="python">
class Posting(models.Model):
...
tag = models.ManyToManyField('Tag', null=True, blank=True) # 태그 모델과 연결.
...
</syntaxhighlight>
|-
|admin.py 수정
|관리자창에서 볼 수 있게 수정해주자.
|<syntaxhighlight lang="python">
class TagAdmin(admin.ModelAdmin):
list_display = ('name',)
admin.site.register(Tag, TagAdmin)
</syntaxhighlight>
|-
|DB반영
|app에 대하여 DB에 반영한다.
|python manage.py makemigrations app
python manage.py migrate app
|}

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

== view.py 수정 ==
{| class="wikitable"
!과정
!설명
!코드
|-
|태그생성함수 짜기
|request와 posting을 받아 태그를 생성하는 함수를 짠다.
|<syntaxhighlight lang="python">
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_)
</syntaxhighlight>
|-
|기존 함수 변형
|게시글을 만들고 수정하는 뷰를 변형한다.
|<syntaxhighlight lang="python">
if form.is_valid(): #문제가 없으면 다음으로 진행.
...
posting.save()
tag_adding(request, posting) # 태그 추가 함수.
</syntaxhighlight>
|}

== template 수정 ==
{| class="wikitable"
!과정
!설명
!코드
|-
|게시글 생성 탬플릿
|게시글 생성, 수정 시 태그를 입력하게 한다.
|<syntaxhighlight lang="html">
<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 %}
</syntaxhighlight>추가하는 칸 아래엔 기존에 추가된 태그를 보여준다.
|-
|게시글 탬플릿
|게시글에서 태그를 표시한다.
|<syntaxhighlight lang="html">
<!---태그 추가 부분-->
<labe for = "tags">태그</labe>
{% for tag in posting.tag.all %}
<span>
<a href="{% url 'scientific_humor:tag_info' tag.name %}">
#{{ tag.name }}</a>
{% endfor %}
</syntaxhighlight>
|}

= 태그 삭제 =
[[분류:장고 기능구현(초급)]]

둘러보기 메뉴