到目前为止,我有三种型号:
class clientCode(models.Model):
unique_id = models.CharField(max_length=9, blank=False)
def __str__(self):
return self.unique_id
class clientAccount(models.Model):
clientCode = models.ForeignKey(ClientCode,
on_delete=models.CASCADE, related_name='clientBusiness',null=True)
clientAccount = models.CharField(max_length=13, blank=False)
clientName = models.CharField(max_length=45, blank=False)
class assets(models.Model):
assetName = models.CharField(max_length=45, blank=False)
assetCurrency = models.CharField(max_length=45, blank=False)
assetCode = models.CharField(max_length=15, blank=False)
def __str__(self):
return self.assetName
现在,我想建立一个模型,其中包含上述所有字段以及金额和交易。
我是这样开始的...
class Holdings(models.Model):
holdingsName = models.ManyToManyField(assets)
问题是这样,虽然它返回了我想要的assetName,但是如何检索assetCurrency?
我想我需要知道:如何从一个模型到另一个模型引用单个字段?
我真的迷失了如何做到这一点,我尝试了许多ForeignKey,ManytoMany ..构建包含所有字段和所述模型的表单的正确方法是正确的方法吗?
要澄清一下,我基本上希望clientAccount和资产保留为列表,而Holdings模型字段是与这些模型相关的下拉列表?
很抱歉,如果不清楚,在此先感谢您的帮助! -我确定我对如何建立模型一窍不通。
答案 0 :(得分:0)
好吧,首先需要确定模型之间的关系,或者ClientCode,ClientAccount,Assets和Holdings之间的关系是什么。
例如,松散定义的持股是某人所拥有的股票,财产或其他金融资产。因此,您的持股和资产模型可能就是这样。
还请遵循Django命名约定作为您的代码。我更改了字段/模型名称以在下面反映出来。链接here
class Asset(models.Model)
asset_name = models.CharField(max_length=45, blank=False)
asset_currency = models.CharField(max_length=45, blank=False)
asset_code = models.CharField(max_length=15, blank=False)
def __str__(self):
return self.asset_name
class Holding(models.Model)
holding_name = models.CharField(max_length=50)
assets = models.ManyToManyField(Asset, related_name='holdings',
through='HoldingAsset')# if you want some more explicit fields on the through model
def __str__(self):
assets = self.assets.all()
asset_currencies = [asset.asset_currency for asset in assets]
return '%s -- %s' % (self.holding_name, self.asset_currencies)
现在,如果您得到一个这样的保持对象(在这里忽略任何未处理的错误)
holding = models.Holding.objects.get(holding_name='Test_Holdings')
要访问您的资产及其货币,您可以执行以下操作。
assets = holding.assets.all()
asset_currencies = [asset.asset_currency for asset in assets]
要基于资产加载馆藏,反之亦然,您将需要使用模型形式并使用链式下拉方法。