【发布时间】:2014-02-24 17:30:45
【问题描述】:
我有以下 django 模型:
class Equity(models.Model):
symbol = models.CharField(max_length=128)
dividend = models.DecimalField(max_digits=9, decimal_places=2)
class Portfolio(models.Model):
name = models.CharField(max_length=128)
holdings = models.ManyToManyField(Equity, through='PortfolioHolding')
class PortfolioHolding(models.Model):
equity = models.ForeignKey(Equity)
portfolio = models.ForeignKey(Portfolio)
weight = models.FloatField(default=0.0)
我正在尝试制作一个表单集,允许我修改投资组合中所有持股的股息值。目前我有:
PortfolioHoldingDivFormSetBase = modelformset_factory(PortfolioHolding, extra=0, fields=['dividend',])
class PortfolioHoldingDividendFormset(PortfolioHoldingDivFormSetBase):
def add_fields(self, form, index):
super(SubPortfolioHoldingDividendFormset, self).add_fields(form, index)
form.fields['is_checked'] = forms.BooleanField(required=False)
在我看来,我将表单集称为如下:
formset = PortfolioHoldingDividendFormset(request.POST or None, queryset=p.portfolioholding_set.all().order_by('equity__symbol'))
其中 p 是有效的投资组合模型对象。
问题在于 PortfolioHolding 模型不包含股息字段,而是与 PortfolioHolding 相关联的 Equity 模型。我尝试将 modelformset_factory 中的字段更改为 'equity.dividend',但没有成功。有没有
- 有什么方法可以在我的表单集中访问直通关系的另一端?或
- 是否有可能从另一个方向来 - 为 Equity 模型创建我的 modelformset_factory,然后在我看来做一个查询集来加载给定投资组合 p 的适当股票?或
- 还有其他方法吗?
【问题讨论】:
-
这段代码是干什么用的?客户、个人或雇主项目?我也在开发证券应用程序,并且有兴趣聊天:)
标签: python django django-orm formset