Django에서 일대 다 관계 표현
데이터베이스는 거의 모든 곳에서 중요한 역할을하며 웹 개발이 그러한 장소 중 하나라는 것은 놀라운 일이 아닙니다. SQL을 사용하여 테이블을 만들고 테이블 간의 관계를 설정하는 것은 간단한 작업이지만 Django는 훨씬 더 간단합니다.
이 기사에서는 Django에서 일대 다 관계를 표현하는 방법을 소개합니다.
접합 / 중개 모델을 사용하여 일대 다 관계 표현
다음 모델의 정의를 참조하십시오.
class Number(models.Model):
number = models.CharField(max_length=10)
class Person(models.Model):
name = models.CharField(max_length=200)
class PersonNumber(models.Model):
person = models.ForeignKey(Person, on_delete=models.CASCADE, related_name="numbers")
number = models.ForeignKey(Number, on_delete=models.CASCADE, related_name="person")
Number
모델에는 전화 번호를 저장하기위한number
필드가 있습니다.
Person
모델에는 그 사람의 이름을위한name
필드가 있습니다.
PersonNumber
는Number
와Person
의 접합 또는 중개 모델입니다. 외래 키는 참조 된 개체와 계단식 관계를 갖습니다. 이 모델은 다 대다 관계뿐만 아니라 일대 다 관계를 설정하는 데 사용할 수 있습니다.
모든 모델의 기본 기본 키는 정수 자동 필드 인id
입니다.
전화 번호는 한 사람과 만 연관되지만 한 사람이 두 개 이상의 전화 번호를 가질 수 있기 때문에 이것은 일대 다 관계입니다. PersonNumber
는이 관계를 나타내는 데 사용됩니다.
변수person
이Person
개체를 저장하는 경우 다음 문을 사용하여이 사람의 모든 전화 번호에 쉽게 액세스 할 수 있습니다.
numbers = person.numbers.objects.all()
이 명령문은Number
오브젝트의QuerySet
를 리턴합니다.
이 예를 고려하십시오.
ID | Person | Number |
---|---|---|
1 | 1 | 1 |
2 | 1 | 2 |
3 | 1 | 3 |
4 | 1 | 4 |
5 | 2 | 5 |
6 | 2 | 6 |
7 | 3 | 7 |
id
1
을 가진 사람은id
1
,2
,3
및4
가있는 네 개의 전화 번호를 가지고 있습니다.
id``2
를 가진 사람은id
5
및6
이있는 두 개의 전화 번호를 가지고 있습니다.
id
3
을 가진 사람은id
7
이있는 전화 번호가 하나만 있습니다.
외래 키를 사용하여 일대 다 관계 표현
다음 모델의 정의를 참조하십시오.
class Person(models.Model):
name = models.CharField(max_length=200)
class Number(models.Model):
person = models.ForeignKey(Person, on_delete=models.CASCADE)
number = models.CharField(max_length=10)
Person
모델에는 그 사람의 이름을위한name
필드가 있습니다.
Number
모델에는 전화 번호를 저장하는number
필드와Person
모델에 대한 외래 키 참조가 있습니다. 이 필드는이 번호의 소유자를 저장합니다. 외래 키는 참조 된 모델Person
과 계단식 관계를 갖습니다.
이 구조를 사용하면 외래 키 참조를 사용하여 각Number
개체를 해당 소유자와 쉽게 연결할 수 있습니다.
변수person
이Person
개체를 저장하는 경우 다음 문을 사용하여이 사람과 관련된 모든 번호에 액세스 할 수 있습니다.
numbers = Number.objects.filter(person=person)
이 명령문은Number
오브젝트의QuerySet
를 리턴합니다.