如何在 Django 的表单中使用嵌套的内联表单集? [英] How to have a nested inline formset within a form in Django?
问题描述
我希望这个问题还没有被问到,但我想知道是否有可能为一个对象创建一个普通的基于类的表单,并在其中包含一个内联表单集来编辑它的相关对象.
I hope this question has not been asked yet, but I want to know if it is possible to have a normal class-based form for an object and to have an inline formset inside it to edit its related objects.
例如,我有一个联系人模型
For example, I have a Contact model
class Contact(models.Model):
...
和一个通信模型
And a Communication model
class Communication(models.Model):
contact = models.ForeignKey(Contact)
并且我想要一个联系人表单,其中嵌套了一个内联表单集,用于管理与其相关的通信.
and I want to have a form for Contact with a inline formset nested in it for managing communications related to it.
是否可以使用现有组件来实现这一点,还是我有一个无望的梦想?
Is it possible to do so with existing components or do I have a hopeless dream?
我知道管理面板会这样做,但我如何在视图中工作?
EDIT : I know that the admin panel does it, but how do I make work in a view?
推荐答案
当然有可能 - 你认为管理员是怎么做的?
Of course it's possible - how do you think the admin does it?
评论后编辑 当然,您需要实例化和呈现父表单和嵌套表单集.类似的东西:
Edited after comment Of course, you need to instantiate and render both the parent form and the nested formset. Something like:
def edit_contact(request, contact_pk=None):
if contact_pk:
my_contact = Contact.objects.get(pk=contact_pk)
else:
my_contact = Contact()
CommunicationFormSet = inlineformset_factory(Contact, Communication)
if request.POST:
contact_form = ContactForm(request.POST, instance=my_contact)
communication_set = CommunicationFormSet(request.POST,
instance=my_contact)
if contact_form.is_valid() and communication_set.is_valid():
contact_form.save()
communication_set.save()
else:
contact_form = ContactForm(instance=my_contact)
communication_set = CommunicationFormSet(instance=my_contact)
return render_to_response('my_template.html',
{'form': contact_form, 'formset':communication_set})
模板可以很简单:
<form action="" method="POST">
{{ form.as_p }}
{{ formset }}
</form>
尽管您可能希望更详细地了解如何渲染它.
although you'll probably want to be a bit more detailed in how you render it.
这篇关于如何在 Django 的表单中使用嵌套的内联表单集?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!