Django多对多表的外键

Rya*_*ley 5 django django-models django-admin

我需要帮助才能正确设置模型.说我有三个型号:

  • 帐户
  • 所有者
  • 交易

帐户和所有者是多对多的,因此:

class Account(models.Model):
    number = models.CharField(max_length=10)

class Owner(models.Model):
    account = models.ManyToManyField(Account)
    fullName = models.TextField()
Run Code Online (Sandbox Code Playgroud)

然后,"AccountOwner"可以进行许多交易.所以,如果我和我的妻子拥有相同的帐户,我可以为t进行多次交易,她可以.

我第一次尝试交易模型:

class Transaction(models.Model):
    #Does not work - Could pick account owner is not on
    account = models.ForeignKey(Account)
    owner = models.ForeignKey(Owner)
    title = models.CharField('title', max_length=50)
Run Code Online (Sandbox Code Playgroud)

两个外键不起作用.我在account_owner表上需要一个外键.我可以在不创建实际的account_owner模型的情况下执行此操作吗?

感谢您的时间

cat*_*ran 8

实际上你已经创建了account_owner模型.它在代码中是不可见的,但它是存在的.您可以使其可见并through在M2M字段中使用参数:

class Owner(models.Model):
    accounts = models.ManyToManyField(Account, through='OwnerAccount')
    fullName = models.TextField()

class OwnerAccount(models.Model):
    owner = models.ForeignKey(Owner)
    account = models.ForeignKey(Account)

class Transaction(models.Model):
    owner_account = models.ForeignKey(OwnerAccount)
    title = models.CharField('title', max_length=50)
Run Code Online (Sandbox Code Playgroud)

您仍然可以Owner.accounts像往常一样访问您的2-many-many字段.那么你将调用owner.acounts.add(some_account)相应的OwnerAccount实例将自动创建.