Django与连接表特定字段有很多很多关系

Pro*_*ger 1 django orm many-to-many django-models

我正在将我的应用程序迁移到Django并使用他们的内置ORM而不是编写SQL查询.我遇到的问题是与我的多对多关系中的一个.我有以下型号:

class Orgs(models.Model):
    org = models.AutoField(primary_key=True)
    org_name = models.CharField(max_length=45, null=False)
    org_hood = models.CharField(max_length=60, null=False)
    creation_date = models.DateField(auto_now_add=True)

class Members(models.Model):
    member_ID = models.AutoField(primary_key=True)
    user = models.OneToOneField(User)
    nick_name = models.CharField(max_length=20, null=False)
    is_self_managed = models.BooleanField(default=True)
    orgs = models.ManyToManyField(Orgs, null=True)
Run Code Online (Sandbox Code Playgroud)

有许多组织和许多成员.成员可以是许多组织的一部分,组织可以有许多成员.每个成员都有一个余额(0.00美元)与他们所属的组织相关联.例如:

member1 is in Org1 with a balance of $3.85
member1 is in Org2 with a balance of $2.00
member2 is in Org1 with a balance of $0.85
Run Code Online (Sandbox Code Playgroud)

我无法弄清楚如何定义这个平衡字段.当我没有使用ORM时,我手动创建了连接表,并在连接表中定义了我需要的这些字段.

Kev*_*nry 7

使用您的through参数ManyToManyField可以显式定义连接表并将平衡字段放在那里.

class Orgs(models.Model):
    ...
    members = ManyToManyField(Members, through='Membership')

class Members(models.Model):
    ...

class Membership(models.Model)
    org = models.ForeignKey(Orgs)
    member = models.ForeignKey(Members)
    balance = models.DecimalField()  # or whatever your field type is
Run Code Online (Sandbox Code Playgroud)