0

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

模型.py:

class Person(models.Model):
    ...

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

表格.py:

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


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

视图.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”中表单的动态添加-删除。

但是我稍后想通过视图编辑存储的信息,即从我在请求中传递的对象中加载数据,并使用从数据库中获取的数据渲染表单集(如果有3只宠物与正在编辑的人相关) , 显示“宠物”的 3 个表单实例,并显示它们的值)。

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

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

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

谢谢

4

1 回答 1

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功能

于 2013-01-25T13:51:07.220 回答