我的应用程序中有不同的模型,主模型有一些其他模型的多个实例。
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创建中尝试过查询集,但它没有显示任何内容。
知道如何缓解这个问题吗?也许使用应用程序进行更简单的表单集管理?
谢谢
答案 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)})
然后,您只需在模板中呈现两个表单并添加add
和delete
功能