[英]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.