Django
다 대다 관계
수색…
통과 모델 사용
class Skill(models.Model):
name = models.CharField(max_length=50)
description = models.TextField()
class Developer(models.Model):
name = models.CharField(max_length=50)
skills = models.ManyToManyField(Skill, through='DeveloperSkill')
class DeveloperSkill(models.Model):
"""Developer skills with respective ability and experience."""
class Meta:
order_with_respect_to = 'developer'
"""Sort skills per developer so that he can choose which
skills to display on top for instance.
"""
unique_together = [
('developer', 'skill'),
]
"""It's recommended that a together unique index be created on
`(developer,skill)`. This is especially useful if your database is
being access/modified from outside django. You will find that such an
index is created by django when an explicit through model is not
being used.
"""
ABILITY_CHOICES = [
(1, "Beginner"),
(2, "Accustomed"),
(3, "Intermediate"),
(4, "Strong knowledge"),
(5, "Expert"),
]
developer = models.ForeignKey(Developer, models.CASCADE)
skill = models.ForeignKey(Skill, models.CASCADE)
"""The many-to-many relation between both models is made by the
above two foreign keys.
Other fields (below) store information about the relation itself.
"""
ability = models.PositiveSmallIntegerField(choices=ABILITY_CHOICES)
experience = models.PositiveSmallIntegerField(help_text="Years of experience.")
고유 한 색인을 (developer,skill)
에서 작성하는 것이 좋습니다. 이것은 데이터베이스가 외부 장고로부터 접근 / 수정되는 경우 특히 유용합니다. 이러한 인덱스는 명시 적 모델을 사용하지 않을 때 django에 의해 만들어집니다.
단순한 많은 관계.
class Person(models.Model):
name = models.CharField(max_length=50)
description = models.TextField()
class Club(models.Model):
name = models.CharField(max_length=50)
members = models.ManyToManyField(Person)
여기서 우리는 클럽에 많은 Person
및 회원이 있고 한 사람이 여러 다른 Club
의 회원이 될 수있는 관계를 정의합니다.
우리는 두 개의 모델 만 정의하지만 django는 실제로 우리를 위해 데이터베이스에 세 개의 테이블을 생성합니다. 이들은 myapp_person
, myapp_club
및 myapp_club_members입니다. Django는 myapp_club_members(club_id,person_id)
열에 고유 색인을 자동으로 만듭니다.
ManyToMany 필드 사용
첫 번째 예제에서이 모델을 사용합니다.
class Person(models.Model):
name = models.CharField(max_length=50)
description = models.TextField()
class Club(models.Model):
name = models.CharField(max_length=50)
members = models.ManyToManyField(Person)
톰과 빌을 나이트 클럽에 추가하십시오 :
tom = Person.objects.create(name="Tom", description="A nice guy")
bill = Person.objects.create(name="Bill", description="Good dancer")
nightclub = Club.objects.create(name="The Saturday Night Club")
nightclub.members.add(tom, bill)
클럽에 누가 있습니까?
for person in nightclub.members.all():
print(person.name)
너에게 줄거야.
Tom
Bill
Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow