在另一个模型中引用模型的单个字段?

时间:2019-01-28 22:42:39

标签: python django django-models

到目前为止,我有三种型号:

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模型字段是与这些模型相关的下拉列表?

很抱歉,如果不清楚,在此先感谢您的帮助! -我确定我对如何建立模型一窍不通。

1 个答案:

答案 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]

要基于资产加载馆藏,反之亦然,您将需要使用模型形式并使用链式下拉方法。