2009-12-05 37 views
3

我想通過ModelFormSet顯示多個表單,其中每個表單依次顯示連接到對象的所有對象的InlineFormSets如何將InlineFormSet放入Django的ModelFormSet中?

現在我不確定如何爲每個ModelFormSet提供實例。我想過子類化BaseModelFormSet,但我不知道從哪裏開始,並且想知道在我解決所有問題之前是否可以做到這一點。

在此先感謝!

回答

2

我發現了一篇關注確切問題的文章。它工作正常!

http://yergler.net/blog/2009/09/27/nested-formsets-with-django/

爲了完整起見,我複製的代碼片段:

class Block(models.Model): 
    description = models.CharField(max_length=255) 

class Building(models.Model): 
    block = models.ForeignKey(Block) 
    address = models.CharField(max_length=255) 

class Tenant(models.Model): 
    building = models.ForeignKey(Building) 
    name = models.CharField(max_length=255) 
    unit = models.CharField(max_length=255) 

form django.forms.models import inlineformset_factory, BaseInlineFormSet 

TenantFormset = inlineformset_factory(models.Building, models.Tenant, extra=1) 

class BaseBuildingFormset(BaseInlineFormSet): 

    def add_fields(self, form, index): 
     # allow the super class to create the fields as usual 
     super(BaseBuildingFormset, self).add_fields(form, index) 

     # created the nested formset 
     try: 
      instance = self.get_queryset()[index] 
      pk_value = instance.pk 
     except IndexError: 
      instance=None 
      pk_value = hash(form.prefix) 

     # store the formset in the .nested property 
     form.nested = [ 
      TenantFormset(data=self.data, 
          instance = instance, 
          prefix = 'TENANTS_%s' % pk_value)] 

BuildingFormset = inlineformset_factory(models.Block, models.Building, formset=BaseBuildingFormset, extra=1) 
+0

我怎麼可能,如果修改代碼,我的建築別t屬於一個Block模型?即我希望能夠傳遞建築物的初始數據(或建築物的查詢集),然後顯示下面的租戶。期待聽到你的想法。 –

+0

您可以將'modelformset_factory'用於建築物的初始查詢集而不是'inlineformset_factory'。 – jnns

+0

@jnns:我也有同樣的問題,你在Ur問題中解釋,但在你的解決方案中,我沒有看到modelformset的用法,我怎樣才能生成多個表單,其中每個表單顯示相關的內聯表單?這裏是我的問題http://stackoverflow.com/questions/11929355/combine-modelformset-and-inlineformset-in-django-views/11929680#comment15888609_11929680 – Asif

相關問題