[英]Add data to Django form class using modelformset_factory
我有一个问题,需要为分层数据集显示很多详细数据表格。 我想显示一些关系字段作为表单的标签,而我正在努力以一种更可靠的方式来做到这一点。 这是代码...
class Category(models.Model):
name = models.CharField(max_length=160)
class Item(models.Model):
category = models.ForeignKey('Category')
name = models.CharField(max_length=160)
weight = models.IntegerField(default=0)
class Meta:
ordering = ('category','weight','name')
class BudgetValue(models.Model):
value = models.IntegerField()
plan = models.ForeignKey('Plan')
item = models.ForeignKey('Item')
我使用modelformset_factory为特定计划创建预算值表单的表单集。 我想要的是每个BudgetValue的商品名称和类别名称。 当我遍历表格时,每个表格都将正确标记。
class BudgetValueForm(forms.ModelForm):
item = forms.ModelChoiceField(queryset=Item.objects.all(),widget=forms.HiddenInput())
plan = forms.ModelChoiceField(queryset=Plan.objects.all(),widget=forms.HiddenInput())
category = "" < assign dynamically on form creation >
item = "" < assign dynamically on form creation >
class Meta:
model = BudgetValue
fields = ('item','plan','value')
我开始只是创建一个budgetvalue.item.category.name,budgetvalue.item.name以及每个预算值的形式的字典。 这将传递到模板,然后按预期进行渲染。 我假设表单集中的表单顺序和用于生成表单集的查询集使预算值保持相同的顺序,并且正确创建了字典。 也就是说budgetvalue.item.name与正确的格式相关联。 这让我感到恐惧,我想必须有一个更好的方法。 任何帮助将不胜感激。
好吧,我想出了我自己问题的答案。 我已经覆盖了表单上的init类,并访问了模型表单的实例。 完全按照我的要求工作,这很容易。
class BudgetValueForm(forms.ModelForm):
item = forms.ModelChoiceField(queryset=Item.objects.all(),widget=forms.HiddenInput())
plan = forms.ModelChoiceField(queryset=Plan.objects.all(),widget=forms.HiddenInput())
def __init__(self, *args, **kwargs):
super(BudgetValueForm, self).__init__(*args, **kwargs)
self.itemname = self.instance.item.name
self.categoryname = self.instance.item.category.name
class Meta:
model = BudgetValue
fields = ('item','plan','value')
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.