Django:多对多的关系模型定义

时间:2014-12-05 15:30:06

标签: python django database models

我正在做一些模型,并在设计时考虑过,这里有一个例子:一家银行购买股票,所以一家银行可以有很多股票,很多股票可以从很多银行购买,其中有很多甚至很多关系但是当银行购买股票时,它必须保留价格和购买日期/期间/轮次的记录,对于销售工作相同,o为了记录所有这一切我做一个班级像这样的东西:

class Bank(models.Model):
    name = models.Charfield()
    money = models.IntegerField()


class StockShares(models.Model):
    name = models.Charfield()
    price = models.Charfield()

现在要建立一种关系我知道我必须添加

stock = models.ManyToManyField(StockShares)

但是,如何添加仅在购买或销售时才存在的关系属性?

我在想也许我可以这样做:

class Bank(models.Model):
    name = models.Charfield()
    money = models.IntegerField()


class StockShares(models.Model):
    name = models.Charfield()
    price = models.Charfield()


class Sale(models.Model):
    bank = models.ForeignKey(Bank)
    stockshares = models.ForeignKey(StockShares)
    date = models.DateField()
    quantity = models.ForeignKey()##this should be the quantity of stockshares sold in $ im just lazy to write it down 

这是我在没有使用django和数据库管理器

的情况下的规范

有没有办法在django中实现这一点,而不用中间类来处理这种关系?或者我正在做我的好事,这就是django必须要做的事情

pd:英语不是我在这里尽我所能的第一语言

提前感谢您的回答!

1 个答案:

答案 0 :(得分:2)

您正在寻找Extra fields on many-to-many relationships
您的代码应如下所示:

class Bank(models.Model):
    name = models.Charfield()
    money = models.IntegerField()
    members = models.ManyToManyField(StockShares, through='Sale')

class StockShares(models.Model):
    name = models.Charfield()
    price = models.Charfield()


class Sale(models.Model):
    bank = models.ForeignKey(Bank)
    stockshares = models.ForeignKey(StockShares)
    date = models.DateField()

也许数量应该计算字段