티스토리 뷰
게시판 기능 중에 태그 기능 추가하기
1. 터미널 창에 "python manage.py startapp tag " 입력
그러면 tag 라는 이름의 앱이 생기고 관련 파일들이 생성된다.
2. models.py 에서 객체 설정하기
3. admin.py 에서 관리자 페이지에 어떻게 나타낼 것인지 지정
4. 새로 생성한 모델에 대해서 migrate 실행
python manage.py makemigrations
python manage.py migrate
5. 이 태그 기능은 게시판에서 사용될 것이므로 게시판 app과 연결해야한다.
board 의 models.py로 들어가서 tag를 객체에 추가한다.
태그는 여러 개 사용할 수 있고 여러 사람이 사용하므로 다대다 필드 설정
board 모델이지만 tag 모델에 있는 값 참조하므로 tag.Tag
# N:M (다대다) => ManyToManyField
tag = models.ManyToManyField('tag.Tag', verbose_name='태그')
6. 게시판 객체에 태그를 추가했으므로 이제 기능적인 측면에서 태그를 추가해야한다.
게시판에서 글을 쓸 때 태그를 입력하는 것, 게시글을 볼 때 태그도 같이 보여주는 것
두 가지를 추가해야한다.
6-1. 게시글을 볼 때 태그도 같이 보여주는 것
게시글을 보여주는 html에서 코드를 추가해야한다.
제목, 내용을 보여주는 코드 밑에 태그 보여주는 코드 추가
<label for = "tags">태그</label>
<span id = "tags" class= "form-control">
{{ board.tag.all|join:", "}}
<!-- {% for tag in board.tag.all %}
{{ tag.name }},
{% endfor %} -->
</span>
6-2. 게시판에 글을 쓸 때 태그를 입력하는 것
글을 쓰는 함수 views.py에서 board_write 함수에서 추가해야한다.
여기서 주의해야 할 점이 있다.
게시글 객체 Board()를 생성하고 그 안에 제목, 내용, 작성자를 담고 board.save()를 통해서 저장했다.
이 때, 태그는 게시글에 추가되는 것이므로 이미 board가 완성된 상태에서 추가되어야한다.
board 객체가 생성되고 나면 id 가 부여되는데 그 id를 이용해서 태그 추가
또한, 기존에 있는 태그인 경우와 새로운 태그인 경우를 나눠서 구현해야한다.
이미 존재한다면 그냥 가져오고 그게 아니라면 새로 생성한다.
board.save() tags = form.cleaned_data['tag'].split(",") for tag in tags: # 태그가 없다면 if not tag: continue
# 기존에 있는 태그인 경우, 새로운 태그인 경우 나눠서 구현 # Tag 에서 이름이 tag인 것이 존재한다면 가져오고 아니면 새로 생성. 어쨋든 어떤 값은 가져온다. # tag_ 변수에는 생성된 객체(클래스 변수) created 에는 새로 생성된건지 아닌지 여부 Boolean 값 가짐. tag_ , created = Tag.objects.get_or_create(name=tag) board.tag.add(tag_) |
cleaned_data
cleaned_data를 계속 쓰는데 어떤 용도인지 모르겠다.
그냥 form 에서는 cleaned_data , model Form에서는 save()
save와 비슷한 기능을 하는 것. 기존의 forms.Form에 있던 clean 함수 ?
ModelForm 과 Form 일 때의 차이인 것 같다. 아래의 글을 참고하면 좋을듯
https://github.com/YeongBaeeee/practice/wiki/18-ModelForm-&-Form-Validation
YeongBaeeee/practice
Contribute to YeongBaeeee/practice development by creating an account on GitHub.
github.com
'python' 카테고리의 다른 글
[python django] error handling (0) | 2020.01.08 |
---|---|
[python django] migrations Error 해결 (0) | 2020.01.03 |
[python django] django 기초 (3) pythonanywhere 배포 (0) | 2019.12.20 |
[python django] django 기초 (1) (0) | 2019.12.20 |
[python] 데이터베이스 연동 SQLite3 삽입, 수정, 삭제, Dump, commit (0) | 2019.12.05 |
- Total
- Today
- Yesterday
- django 로그인접근
- cleaned_data
- ModelForm Form 차이
- Django
- 데이터베이스 추천
- Realtime Database
- django tag
- CellForRowAt Not Called
- pythonanywhere배포방법
- iOS UITableView 출력안됨
- django 게시판
- iOS 검은 화면
- iOS 화면 안나옴
- 알파벳 카운팅
- django clean
- UITableViewController Not Working
- pythonanywhere배포
- 실시간 데이터베이스
- python 웹 배포
- CellForRowAt 호출안됨
- 까만 화면
- django pythoneverywhere
- iOS 데이터베이스
- 장고 게시판
- 웹 배포
- django 개발일지
- Firebase 데이터베이스 추천
- django 태그
- 장고 태그달기
- 테이블출력안됨
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |