我需要帮助才能正确设置模型。说我有三个型号:
帐户和所有者是多对多的,所以:
class Account(models.Model):
number = models.CharField(max_length=10)
class Owner(models.Model):
account = models.ManyToManyField(Account)
fullName = models.TextField()
然后,“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)
两个外键不起作用。我在account_owner表上需要一个外键。我可以在不创建实际的account_owner模型的情况下执行此操作吗?
感谢您的时间
答案 0 :(得分:8)
事实上,您已经创建了account_owner
模型。它在代码中是不可见的,但它是存在的。您可以使其可见并在M2M字段中使用through
参数:
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)
您仍然可以像往常一样访问Owner.accounts
多2字段。那么您将调用owner.acounts.add(some_account)
将自动创建相应的OwnerAccount
实例。
答案 1 :(得分:0)
我认为你可能会以错误的方式解决这个问题。
在帐户级别跟踪交易,因此您不必担心" AccountOwner"在交易表中; " AccountOwner"部分是谁有权使用该帐户,该信息在您的应用程序的其他地方使用。
我建议你这样做:
交易是在"购物车/购物篮"级别,并且与一个(或许多,取决于您是否要允许部分付款)帐户。
在"购物车/购物篮"级别,您可以跟踪登录的人;然后在结帐页面向他们展示他们拥有的帐户的过滤列表;使用Owner.objects.filter(fullName='John Smith').account_set.all()
之类的查询;在这里,您可以跟踪谁发出了交易请求。
在交易表中,存储以下信息:
这样,交易表中包含与交易相关的信息,并且不会保留您的所有权"信息。明天,如果你决定改变所有者,你只需要在一个有意义的地方(在Owner
模型中),而不是交易模型。