๐[Django] unique_together ์ ์ฝ์กฐ๊ฑด?
unique_together ์ต์ ?
Django Model์ ์์ฑํ๋ค๋ณด๋, class Meta์ unique_together
๋ฅผ ์ฌ์ฉํ ์ผ์ด ์์๋ค.
์ด๊ฑด ์ ํํ ์ด๋ค ์๋ฏธ์ ์ต์ ์ผ๊น?
Django ๋ชจ๋ธ์์ 2๊ฐ ์ด์์ ํ๋๊ฐ ํฉ์ณ์ก์ ๋, ์ค๋ณต์ ํ์ฉํ์ง ์๋๋ก
ํ๋ ์ ์ฝ ์กฐ๊ฑด์ด๋ค.
์ฆ, ๋ณตํฉ ์ ๋ํฌ ํค(Composite Unique Key)
๋ฅผ ์ค์ ํ ๋ ์ฌ์ฉํ๋ค.
๊ธฐ๋ณธ ๋ฌธ๋ฒ
class MyModel(models.Model):
field1 = models.CharField(max_length=100)
field2 = models.CharField(max_length=100)
class Meta:
unique_together = ('field1', 'field2')
์ฌ๊ธฐ์๋ field1
, field2
์ ์กฐํฉ์ด ์ค๋ณต๋๋ฉด ์๋๋ค๋ ์๋ฏธ์ด๋ค.
์๋ฅผ ๋ค๋ฉด
MyModel.objects.create(field1="apple", field2="banana") # 1
MyModel.objects.create(field1="apple", field2="banana") # 2
MyModel.objects.create(field1="apple", field2="melon") # 3
1
: ๊ฐ๋ฅํ ์กฐํฉ2
: ๋ถ๊ฐ๋ฅํ ์กฐํฉ (IntegrityError
)3
: ๊ฐ๋ฅํ ์กฐํฉ
๋ณดํต ์ด๋จ ๋ ์ธ๊น?
- ํ ๋ช
์ ์ฌ์ฉ์๊ฐ ๊ฐ์ ์ด๋ฉ์ผ์ ๋ ๋ฒ ๋ฑ๋กํ๋ฉด ์๋๋ ๊ฒฝ์ฐ
unique_together = ("user", "email")
- ํ์ฌ + ๋ถ์ ์ด๋ฆ์ ์กฐํฉ์ ๊ณ ์ ํด์ผ ํ๋ ๊ฒฝ์ฐ
unique_together = ("company", "department")
- ๋ ์ง + ์ฌ์ฉ์ ์กฐํฉ์ผ๋ก ์ถ์ ๊ธฐ๋ก ์ค๋ณต ๋ฐฉ์ง
unique_together = ("user", "date")
๋๊ธ๋จ๊ธฐ๊ธฐ