O formulário de gerenciamento do Django está falhando porque 'form-TOTAL_FORMS' e 'form-INITIAL_FORMS' não estão preenchidos corretamente

Em formação:

Eu gostaria de criar formulários aninhados como é melhor descrito através do exemplo fornecido em:

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

O tutorial nesta página parece ser muito bom e está tentando realizar o problema exato que estou encontrando.

Parece haver um problema com essa implementação no arquivo views.py quando não há dados de solicitação POST (ou seja, estamos realizando o preenchimento inicial do banco de dados).

O código pode ser visto na URL fornecida acima (se necessário eu posso postar um pouco do código, mas temo que isso tire as informações fornecidas aqui).

Aqui está o código views.py que está falhando (em negrito):

block = get_object_or_404(models.Block, id=block_id)

if request.method == 'POST':
    formset = forms.BuildingFormset(request.POST, instance=block)

    if formset.is_valid():
        rooms = formset.save_all()

        return redirect('block_view', block_id=block.id)

else:
    formset = forms.BuildingFormset(instance=block)  #This is the line that is throwing the ValidationError 

A mensagem de erro que estou recebendo é:

ValidationError at "urlName":
[u'ManagementForm data is missing or has been tampered with']

Eu tenho cavado mais fundo e parece que esta falha está ocorrendo na linha site-packages / django / forms / formsets.py

ois_valid() a verificação está falhando porque alguns dos dados obrigatórios do formulário de gerenciamento (formulário-TOTAL_FORMS, form-INITIAL_FORMS e form-MAX_NUM_FORMS) são inválidos. Aqui está a saída real de self.errors abaixo:

{u'TOTAL_FORMS': [u'This field is required.'], u'INITIAL_FORMS': [u'This field is required.']}
Código:

edit_building.html:

{{buildings.management_form}}

{% para a construção em buildings.forms%}

 {{ building }}

 {% if building.nested %}   
   {% for formset in building.nested %}   
     {{ formset.as_table }}   
   {% endfor %}   
 {% endif %}

{% endfor%}

views.py:

def should_delete(self, form):
    """Convenience method for determining if the form’s object will
    be deleted; cribbed from BaseModelFormSet.save_existing_objects."""

    if self.can_delete:
        raw_delete_value = form._raw_value(DELETION_FIELD_NAME)
        should_delete = form.fields[DELETION_FIELD_NAME].clean(raw_delete_value)
        return should_delete

    return False

def save_all(self, commit=True):
    """Save all formsets and along with their nested formsets."""

    # Save without committing (so self.saved_forms is populated)
    # — We need self.saved_forms so we can go back and access
    #    the nested formsets
    objects = self.save(commit=False)

    # Save each instance if commit=True
    if commit:
        for o in objects:
            o.save()

    # save many to many fields if needed
    if not commit:
        self.save_m2m()

    # save the nested formsets
    for form in set(self.initial_forms + self.saved_forms):
        if self.should_delete(form): continue

        for nested in form.nested:
            nested.save(commit=commit)

forms.py:

def should_delete(self, form):
    """Convenience method for determining if the form’s object will
    be deleted; cribbed from BaseModelFormSet.save_existing_objects."""

    if self.can_delete:
        raw_delete_value = form._raw_value(DELETION_FIELD_NAME)
        should_delete = form.fields[DELETION_FIELD_NAME].clean(raw_delete_value)
        return should_delete

    return False

def save_all(self, commit=True):
    """Save all formsets and along with their nested formsets."""

    # Save without committing (so self.saved_forms is populated)
    # — We need self.saved_forms so we can go back and access
    #    the nested formsets
    objects = self.save(commit=False)

    # Save each instance if commit=True
    if commit:
        for o in objects:
            o.save()

    # save many to many fields if needed
    if not commit:
        self.save_m2m()

    # save the nested formsets
    for form in set(self.initial_forms + self.saved_forms):
        if self.should_delete(form): continue

        for nested in form.nested:
            nested.save(commit=commit)
Notas:

Eu já examinei a documentação do django emhttps://docs.djangoproject.com/en/dev/topics/forms/formsets/#understanding-the-managementform e não encontrou nada muito útil que discuta como esses valores são automaticamente preenchidos pelo DJANGO

Eu estou usando o Django V1.5

Questões:

No caso de não haver dados POST e o formulário estar sendo gerado apenas a partir do banco de dados, como os dados 'form-TOTAL_FORMS' e 'form-INITIAL_FORMS' devem ser preenchidos corretamente para solucionar essa falha?

questionAnswers(1)

yourAnswerToTheQuestion