簡體   English   中英

有或沒有關系表的DJANGO中的多對多關系

[英]Many to Many relationships in DJANGO with or without a relation table

我是Django的新手。 通常,當存在多對多關系時,我將創建一個單獨的表來保存該關系

有人可以解釋如何在Django中做到這一點

這是我的嘗試:
一個“教學者”可以“教學”許多“模塊”
一個“模塊”可以被許多“教育者”當作“教育者”

class Etudiant(models.Model):
    id_etudiant = models.OneToOneField('Utilisateur', models.DO_NOTHING, db_column='id_Utilisateur', primary_key=True)
    id_groupe = models.ForeignKey('Groupe', models.DO_NOTHING, db_column='id_Groupe')

    class Meta:
        db_table = 'Etudiant'


class Module(models.Model):
    id_module = models.CharField(db_column='id_Module', primary_key=True, max_length=25)
    titre_module = models.CharField(db_column='titre_Module', max_length=25, blank=True, null=True)
    uniteenseignement_module = models.CharField(db_column='uniteEnseignement_Module', max_length=25, blank=True, null=True)
    finsaisie_module = models.IntegerField(db_column='FinSaisie_Module', blank=True, null=True)

    class Meta:
        db_table = 'Module'


class Etudier(models.Model):
    id_etudiant = models.ForeignKey('Etudiant', models.DO_NOTHING, db_column='id_etudiant')
    id_module = models.OneToOneField('Module', models.DO_NOTHING, db_column='id_Module', primary_key=True)

    class Meta:
        db_table = 'etudier'
        unique_together = (('id_module', 'id_etudiant'),)

從Django文檔中:

對於這些情況,Django允許您指定將用於管理多對多關系的模型。 然后,您可以在中間模型上放置額外的字段。 中間模型使用through參數與ManyToManyField關聯,以指向將充當中間模型的模型。 對於我們的音樂家示例,代碼如下所示:

 from django.db import models

 class Person(models.Model):
     name = models.CharField(max_length=128)

     def __str__(self):
         return self.name


 class Group(models.Model):
     name = models.CharField(max_length=128)
     members = models.ManyToManyField(Person, through='Membership')

     def __str__(self):
         return self.name

 class Membership(models.Model):
     person = models.ForeignKey(Person, on_delete=models.CASCADE)
     group = models.ForeignKey(Group, on_delete=models.CASCADE)
     date_joined = models.DateField()
     invite_reason = models.CharField(max_length=64)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM