๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
โญ Personal_Study/Django

(M:N) Article - User Relationship

by ํฌ์ŠคํŠธ์‰์ดํฌ 2022. 10. 17.

M:N (Article-User)

Like ๊ธฐ๋Šฅ ๊ตฌํ˜„ํ•˜๊ธฐ(model ์ถ”๊ฐ€)

  1. ManyToManyField ์ž‘์„ฑ
    image
  2. ๊ทธ๋Ÿฌ๋‚˜...
    image
    โœ” Article๊ณผ User๊ฐ€ ์ด๋ฏธ (N:1) ๊ด€๊ณ„๋ฅผ ๋งบ๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ถฉ๋Œํ•˜๋Š” ํ˜„์ƒ ๋ฐœ์ƒ!
    โœ” user๊ฐ€ ์ž‘์„ฑํ•œ ๊ธ€๋“ค(user.article_set)๊ณผ user๊ฐ€ ์ข‹์•„์š”๋ฅผ ๋ˆ„๋ฅธ ๊ธ€๋“ค(user.article_set)์„ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์—†๋‹ค.
  3. related_name ์ž‘์„ฑ
    image
    โœ” ์ผ๋ฐ˜์ ์œผ๋กœ N:1 ๊ด€๊ณ„๋Š” ์ž˜ ์ˆ˜์ •ํ•˜์ง€ ์•Š๊ณ  M:N ๊ด€๊ณ„์— related_name์„ ์„ค์ •ํ•ด์ค€๋‹ค.

User - Article ๊ฐ„ related manager ์ •๋ฆฌ

  1. article.user
    โœ” ๊ฒŒ์‹œ๊ธ€์„ ์ž‘์„ฑํ•œ ์œ ์ € - N:1
  2. user.article_set
    โœ” ์œ ์ €๊ฐ€ ์ž‘์„ฑํ•œ ๊ฒŒ์‹œ๊ธ€(์—ญ์ฐธ์กฐ) - N:1
  3. article.like_users
    โœ” ๊ฒŒ์‹œ๊ธ€์„ ์ข‹์•„์š”ํ•œ ์œ ์ € - M:N
  4. user.like_articles
    โœ” ์œ ์ €๊ฐ€ ์ข‹์•„์š”ํ•œ ๊ฒŒ์‹œ๊ธ€(์—ญ์ฐธ์กฐ) - M:N

Like ๊ธฐ๋Šฅ ๊ตฌํ˜„ํ•˜๊ธฐ

  1. urls, views ์ถ”๊ฐ€
    image
    image
    โœ” .get()์€ ๋Œ€์ƒ์ด ์—†์œผ๋ฉด ์—๋Ÿฌ๊ฐ€ ๋‚˜๊ธฐ ๋•Œ๋ฌธ์— .filter() ์‚ฌ์šฉ!

exists()

โœ” QuerySet์— ๊ฒฐ๊ณผ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์œผ๋ฉด True, ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด False
โœ” ํŠนํžˆ ํฐ QuerySet์— ์žˆ๋Š” ํŠน์ • ๊ฐœ์ฒด์˜ ์กด์žฌ์™€ ๊ด€๋ จ๋œ ๊ฒ€์ƒ‰์— ์œ ์šฉ

  1. index.html ์ถ”๊ฐ€
    image
  2. ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ ์ถ”๊ฐ€
    image

๋Œ“๊ธ€