खोज…


एक मॉडल के माध्यम से

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


Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow