在编辑视图中预先填充动态添加的表单集

时间:2013-01-25 13:06:13

标签: django django-forms formsets

我的应用程序中有不同的模型,主模型有一些其他模型的多个实例。

models.py:

class Person(models.Model):
    ...

class Pet(models.Model):
    owner = models.ForeignKey(Person)
    ...

forms.py:

class PersonForm(forms.ModelForm):
    class Meta:
        model = Person


PetFormSet = inlineformset_factory(Person, Pet, extra = 1)

views.py:

def add_template(request):
    person_form = PersonForm(prefix = 'person_form')
    pet_form = PetFormSet(instance = Person(), prefix = 'pet_form')
    ... # check is_valid(), render when no POST data is present, etc.

关键是添加工作完美,将每个实例存储在相应的数据库表等中。我使用jquery.formset-1.2.js来管理" add.html&#中表单的动态添加 - 删除34。

但我后来想通过视图编辑存储的信息,即从我在请求中传递的对象加载数据,并使用从数据库获得的数据呈现formset(如果有3个与之相关的宠物)正在编辑的人,显示3个表格实例" Pet"并显示其值。

我还想添加新的宠物并删除现有的宠物,以及更改现有的字段值。

我在FormSet创建中尝试过查询集,但它没有显示任何内容。

知道如何缓解这个问题吗?也许使用应用程序进行更简单的表单集管理?

谢谢

1 个答案:

答案 0 :(得分:0)

我不确定我是否正确理解你的问题。如果您要显示属于Pets的所有Person

def show_pets(request, person_id=None):
person = get_object_or_404(Person.objects.select_related(), id=person_id)
if request.method == 'POST':
   person_form = PersonForm(request.POST, instance=person)
   pet_formset = PetFormSet(request.POST, instance=person)
   # Rest of your code here
else:
   person_form = PersonForm(instance=person)
   pet_formset = PetFormSet(instance=person)
return render_to_response('your_template.html', {'person_form': person_form,
                                                        'pet_formset': pet_formset)})

然后,您只需在模板中呈现两个表单并添加adddelete功能