当我返回时,Django modelformset表单不为空

时间:2015-12-23 22:15:40

标签: django-models django-forms

如果数据库是空的并且我转到我的表单,它看起来应该是这样的。父母信息有两个点,儿童信息有两个点。如果我填写表格并提交,我没有错误,我会被带到感谢页面。当我回到带有表格的页面时,现在有四个父母信息点和四个儿童信息点。使用数据库中现有的数据填写子信息和父信息的两个点。如果填写空白字段,新数据将添加到数据库中,但如果更改已填充字段中的任何信息,则将更改数据库中已有数据的信息。我甚至尝试通过管理门户手动输入数据,但是当我转到表单时,我输入的信息仍然显示出来。就像formset从数据库中提取信息一样。我如何获得此表单,以便在提交数据后返回时,表单再次为空白?

Form after data submission part 1

Form after data submission part 2

models.py

    from django.db import models

class Child(models.Model):
    first_name = models.CharField(max_length=30)
    last_name = models.CharField(max_length=30)
    birthday = models.DateField()
    allergies = models.CharField(max_length=30)

    def __str__(self):
        return self.first_name + ' ' + self.last_name

class Parent(models.Model):
    first_name = models.CharField(max_length=30)
    last_name = models.CharField(max_length=30)
    child = models.ManyToManyField(Child)

    def __str__(self):
        return self.first_name + ' ' + self.last_name

class Household(models.Model):
    household_name = models.CharField(max_length=30)
    parent = models.ManyToManyField(Parent)

    def __str__(self):
        return self.household_name

forms.py

    from django import forms
from .models import Child, Household, Parent

class HouseholdForm(forms.ModelForm):
    class Meta:
        model = Household
        fields = ('household_name',)

class ParentForm(forms.ModelForm):
    class Meta:
        model = Parent
        fields = ('first_name', 'last_name',)

class ChildForm(forms.ModelForm):
    class Meta:
        model = Child
        fields = ('first_name', 'last_name', 'birthday', 'allergies',)

views.py

    from django.forms import modelformset_factory
from django.shortcuts import get_object_or_404, render, redirect
from .forms import ChildForm, HouseholdForm, ParentForm 
from .models import Child, Parent, Household


def register(request):
    ParentFormSet = modelformset_factory(Parent, form=ParentForm, extra=2)
    ChildFormSet = modelformset_factory(Child, form=ChildForm, extra=2)
    if request.method == "POST":
        formset1 = ParentFormSet(request.POST, prefix="parent",)
        formset2 = ChildFormSet(request.POST, prefix="child",)
        if formset1.is_valid() and formset2.is_valid():
            formset1.save()
            formset2.save()
        return redirect('thanks',)
    else:
        formset1 = ParentFormSet(prefix="parent",)
        formset2 = ChildFormSet(prefix="child",)
    return render(request, 'register.html', {'formset1': formset1, 'formset2': formset2,})

def thanks(request):
    return render(request, 'thanks.html')

0 个答案:

没有答案