Many to Many Relationship
Last updated
Last updated
M has many N
N has many M
1:N
์ ์: ๋ชจ๋ธ ๋จ์ํ (.user)
์ญ์ฐธ์กฐ: ๋ชจ๋ธ_set (.article_set)
M:N
์ ์ ๋ฐ ์ญ์ฐธ์กฐ: ๋ชจ๋ธ ๋ณต์ํ(.like_users, like_articles)
์์ ๋์ํํ ์ ์ฉ models.py๋ก ์ฎ๊ฒจ๋ณด๊ธฐ
ํ์/์์ฌ ์์ฑ
์์ฝ ๋ง๋ค๊ธฐ
1๋ฒ ์์ฌ์ ์์ฝ ๋ชฉ๋ก
1๋ฒ ํ์์ ์์ฝ ๋ชฉ๋ก
1๋ฒ ์์ฌ์ ํ์ ์ถ๋ ฅ
์์ฌ - ํ์๋ค / ํ์ - ์์ฌ๋ค๋ก ์ง์ ์ ๊ทผํ๊ธฐ ์ํด์๋
ManyToManyField
๋ฅผ ์ฌ์ฉํ๋ค.
through
์ต์ ์ ํตํด ์ค๊ฐ ๋ชจ๋ธ์ ์ ์ธํ๋ค.
๋ง์ด๊ทธ๋ ์ด์ ํ์ผ์ ๋ง๋ค๊ฑฐ๋, migrate๋ฅผ ํ ํ์๊ฐ ์๋ค.
์ฆ, ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ํ ๋ณ๊ฒฝ๋๋ ๊ฒ์ ์๊ณ , ORM ์กฐ์์์์ ์ฐจ์ด๋ง ์กด์ฌํ๋ค.
์์ฌ, ํ์ ์ค๋ธ์ ํธ ๊ฐ์ ธ์ค๊ธฐ
1๋ฒ ํ์์ ์์ฌ ๋ชฉ๋ก
ManyToManyField
๊ฐ ์ ์๋Patient
๋ ์ง์ ์ฐธ์กฐ
1๋ฒ ์์ฌ์ ํ์ ๋ชฉ๋ก
Doctor
๋ ์ง์ ์ฐธ์กฐ๊ฐ ์๋๋ผPatient
๋ชจ๋ธ์ ์ญ์ฐธ์กฐ.์ฆ, ๊ธฐ๋ณธ naming convention์ ๋ฐ๋ผ ์ฐธ์กฐ
related_name
: ์ญ์ฐธ์กฐ ์ต์
๊ธฐ๋ณธ ๊ฐ์ {model ์ด๋ฆ}_set
์ญ์ฐธ์กฐ ์ค์ ์ด ๋ฐ๋์ ์ค์ ๋์ด์ผ ํ๋ ์ํฉ์ด ์๋ค
django
์์ makemigrations ํ๋ ๊ฒฝ์ฐ ์ง์ ์ค๋ฅ๋ฅผ ๋ฐ์์์ผ ์ค๋ค
ex) ์์ฑ์(User)-๊ฒ์๊ธ(Article), ์ข์์๋๋ฅธ์ฌ๋(User)-๊ฒ์๊ธ(Article)
์์ ๊ด๊ณ ์ค์ ์ ๋ชจ๋ Article ํด๋์ค์ related_name ์์ด ์ ์๋ฅผ ํ๊ฒ ๋๋ค๋ฉด, ์ญ์ฐธ์กฐ ์ด์ ๋ฐ์
์ผ๋ฐ์ ์ผ๋ก ์ถ๊ฐ ํ๋ ๊ตฌ์ฑ์ด ํ์ ์์ด id ๊ฐ๋ง ์กด์ฌํ๋ ๊ฒฝ์ฐ๋ ์๋์ ๊ฐ์ด ์ ์ธํ๋ค.
์ด ๊ฒฝ์ฐ ์ฑ์ด๋ฆ_patient_doctors ๋ก ํ ์ด๋ธ์ด ์์ฑ๋๋ค.
ํด๋น ํ ์ด๋ธ์ Create/Delete๋ฅผ ์ํด์๋ (์์ฝ์ ์์ฑํ๊ฑฐ๋ ์ญ์ ํ๊ธฐ ์ํด์๋) ์๋์ ๋ฉ์๋๋ฅผ ํ์ฉํ๋ค.
์ค๊ฐ model์ด ํ์ ์๋ ๊ฒฝ์ฐ
ํน์ Class์ ManyToManyField
์ ์ธ (์ค๊ฐ table ์๋์ ์ธ)
์ค๊ฐ model์ด ํ์ํ ๊ฒฝ์ฐ (์ถ๊ฐ ์ ๋ณด๊ฐ ํ์ํ ๊ฒฝ์ฐ)
์ค๊ฐ model ์ ์ ํ
ํน์ Class์ ManyToManyField
์ through
option์ ํตํด ์กฐ์
+
ManyToMany
์์๋ ๋ฐ๋์ค ๋ณต์ํ์ ํํ์ผ๋ก related_name
์ ์ ์ธํ์!!
๋ถํธํ ver.
URL - variable routing
View - ์ข์์ ๋๋ ์ผ๋ฉด ์ทจ์, ์๋๋ ์ผ๋ฉด ์ข์์ (Toggle)
URL - variable routing
accoutns/1/follow
View
follow ๋์ด์๋ ๊ฒฝ์ฐ add
์๋์ด ์๋ ๊ฒฝ์ฐ remove
Template(์๋ต)
User detail redirect