Relations - 다대다 관계
210810
tag 모델 만들기
다대다 관계는 A모델의 여러 레코드가 B모델의 여러 레코드에 연결될 수 있는 관계를 의미한다.
예를 들면 tag가 있다.
models.py
tag = models.ManyToManyField(Tag, null=True, black=True)
다대다 관계 타입을 만들때는 위와같이 할 수 있다.
ManyToManyField에서는 null이 의미가 없기 때문에 인자로 설정해도 안해도 상관이 없다.
WARNINGS:
blog.Post.tag: (fields.W340) null has no effect on ManyToManyField.
포스트 목록 페이지에 tag 추가하기
tag를 test할 때는 다음과 같이 작성할 수 있다
tests.py
self.tag_python_kor = Tag.objects.create(
name="파이썬 공부", slug="파이썬-공부"
)
self.tag_python = Tag.objects.create(
name="python", slug="python"
)
self.tag_hello = Tag.objects.create(
name="hello", slug="hello"
)
post_list.html
{% if p.tags.exists %}
<i class="fas fa-tags"></i>
{% for tag in p.tags.iterator %}
<span class="badge badge-info">{{ tag }}</span>
{% endfor %}
<br/>
<br/>
{% endif %}
3 :
p.tags.all
대신에p.tags.iterator
를 사용했다. 둘다 기능은 동일한데 후자가 서버에 부담을 덜어준다.
tag 페이지 만들기

tag를 클릭했을 때 이동한 페이지에서 태그를 기준으로 게시물을 보여준다는 인식을 주기 위해 태크 뱃지를 위쪽에 위치시킨다.
post_list.html
{% if tag %}
<span class="badge badge-success float">
<i class="fas fa-tags"></i> {{ tag }} ({{ tag.post_set.count }})
</span>
{% endif %}
Last updated
Was this helpful?