๐ฉ์ํฉ
- ์ฌ์ฉ์๊ฐ ์ง๋ฌธ๊ธ๊ณผ ๋ต๊ธ์ ์์ฑํ๋ฉด, ๋ค๋ฅธ ์ฌ์ฉ์๋ ์ข์์๋ฅผ ๊ฐ๊ฐ ์ง๋ฌธ๊ธ๊ณผ ๋ต๊ธ์ ์ํธ์์ฉํ ์ ์์
- ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์ง๋ฌธ๊ธ๊ณผ ๋ต๊ธ์ ๊ฐ๊ฐ ์ข์์ ํ๋๊ฐ ํ์ํจ
- ์ฌ์ฉ์-์ง๋ฌธ๊ธ ํ
์ด๋ธ์ M:M์ผ๋ก ์ฐ๊ฒฐ๋๋
์ง๋ฌธ๊ธ ์ข์์ ํ
์ด๋ธ
๊ณผ ์ฌ์ฉ์-๋ต๊ธ ํ
์ด๋ธ์ M:M์ผ๋ก ์ฐ๊ฒฐ๋๋ ๋ต๊ธ ์ข์์ ํ
์ด๋ธ
์ ๊ฐ๊ฐ ์์ฑํ๊ณ ์ถ์
- ERD ๋๋ก ์ฝ๋๋ฅผ ์์ฑํ๊ณ , migrations์ ํ๋ ์ค ํ๊ธฐ์ ๊ฐ์ ์ค๋ฅ์ฝ๋๋ฅผ ๋ฑ์ด๋๋ค.
class QnAQuestion(models.Model):
user = models.ForeignKey(UserModel, verbose_name="์ง๋ฌธ์์ฑ์", on_delete=models.CASCADE)
title = models.CharField("์ ๋ชฉ", max_length=100)
content = models.TextField("์ง๋ฌธ๊ธ")
like = models.ManyToManyField(UserModel, through="QuestionLike")
created_at = models.DateTimeField("์์ฑ์๊ฐ", auto_now_add=True)
updated_at = models.DateTimeField("์์ ์๊ฐ", auto_now=True)
def __str__(self):
return f"์์ฑ๋ ์ง๋ฌธ์ {self.title} ์
๋๋ค"
- ์์ฑ๋ ERD๋๋ก ManyToMany ํ๋๋ฅผ ์์ฑํ๋ ค๊ณ ํ์ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ฉด์ ๋ง์ด๊ทธ๋ ์ด์
์ด ์คํ๋์ง ์์์
๐ฉ์ค๋ฅ์ฝ๋
๐ฉํธ๋ฌ๋ธ์ํ
์ ํ ํฌ ํ์ด์ฌ
- ๊ตฌ๊ธ๋ง์ ํตํด ๋ฌธ์ ์ ๋ด์ฉ์ ์ฐพ์๋ณด๋ QnAQuestion ๋ชจ๋ธ์์ ์ฌ์ฉํ user์ like ํ๋๊ฐ ๋ชจ๋ UserModel๊ณผ ์ฐ๊ฒฐ์ด ๋์ด์์ด์ ์๊ธด ๋ฌธ์
UserModel.qnaquestions_set
์ฒ๋ผ User๋ชจ๋ธ์ ํตํด์ ๋ฐ์ดํฐ์ ์ ๊ทผํ๋ ค ํ ๋ user๋ฅผ ๊ธฐ์ค์ผ๋ก ํ ์ง, like๋ฅผ ๊ธฐ์ค์ผ๋ก ํด์ผํ ์ง ๋ช
ํํ์ง ์๋ค๋ ๊ฒ์ด ์ด์ ์๋ค
๐ฉํด๊ฒฐ
ํ๋์ ๋ชจ๋ธ์์ ์ฐธ์กฐํ๊ณ ์๋ ์ ์ ๋ชจ๋ธ์ด ๋ ๊ฐ๋ ์๋ค!
- ERD์ ์ค๊ณ ์์ผ๋ก๋ ๋ฌธ์ ๊ฐ ์์์ผ๋ ๋ฌผ๋ฆฌ์ ์ผ๋ก ๋ชจ๋ธ์ ์์ฑํ ๋ ๊ฐ ํ๋๊ฐ ์ฐธ์กฐํ๊ณ ์๋ ๋ชจ๋ธ์ด ๋์ผํ๊ธฐ ๋๋ฌธ์ ๋ฐ์ํ ๋ฌธ์
- ๊ทธ๋ฌ๋ ๋ชจ๋ธ์ ์์ฑํ๋ ๊ณผ์ ์์ ๋ฐ์ํ ๋ฌธ์ ๋ก, ์ด๋ ํ๋์ ๋ชจ๋ธ์ด ์ญ์ฐธ์กฐํ ๋ ๋ฐ๋ผ๋ด์ผํ ํ๋๊ฐ ๋ฌด์์ธ์ง ํ์คํ๊ฒ ์ ์ํด์ค์ผ ํ๋ค
- ManyToMany ํ๋์ related_name์ ์ง์ ํด์ฃผ๋ ๊ฒ์ผ๋ก ์ถฉ๋์ ํผํ ์ ์๋ค.(๋ค๋ฅธ ํ๋์์๋ ๊ฐ๋ฅํ์ง๋ง, ์ด๋ฆ์ ๊ตณ์ด ์ถ๊ฐ์ ์ผ๋ก ๋ฐ๊ฟ์ฃผ์ง๋ ์์๋ค)
like = models.ManyToManyField(UserModel, related_name='question_like', through="QuestionLike")