我有以下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:
formset = PortfolioHoldingDividendFormset(request.POST or None, queryset=p.portfolioholding_set.all().order_by('equity__symbol'))
其中p是有效的投资组合模型对象。
问题是PortfolioHolding模型不包含被除数字段,而是包含与PortfolioHolding链接的Equity模型。我已经尝试将modelformset_factory中的字段更改为'equity.dividend',但这些字段不起作用。有吗
答案 0 :(得分:0)
我让事情变得比他们需要的更难。答案是使modelformset_factory的类型为“Equity”,然后在我的视图中生成查询集p.holdings.order_by('symbol')。现在它的工作就像一个魅力!