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 से एक्सेस / संशोधित किया जा रहा है। आप पाएंगे कि ऐसा इंडेक्स 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