Как поместить InlineFormSet в ModelFormSet в Django? - PullRequest
3 голосов
/ 05 декабря 2009

Я хотел бы отобразить количество форм через ModelFormSet, где каждая из форм по очереди отображает InlineFormSets для всех объектов, подключенных к объекту.

Теперь я не совсем уверен, как предоставить экземпляры для каждого ModelFormSet. Я подумал о создании подкласса BaseModelFormSet, но не знаю, с чего начать, и хотел бы узнать, возможно ли это вообще, прежде чем пройти через все неприятности.

Заранее спасибо!

Ответы [ 2 ]

2 голосов
/ 06 декабря 2009

Я нашел статью, которая фокусируется на точной проблеме. Работает отлично!

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 голосов
/ 24 апреля 2012

Как сказал jnns, вы хотите использовать inlineformset_factory

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...