์ตœ๋Œ€ 1 ๋ถ„ ์†Œ์š”

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")

์นดํ…Œ๊ณ ๋ฆฌ:

์—…๋ฐ์ดํŠธ:

๋Œ“๊ธ€๋‚จ๊ธฐ๊ธฐ