我希望还没有提出这个问题,但我想知道是否可以为对象创建一个普通的基于类的表单,并在其中包含一个内联formset来编辑其相关对象。
例如,我有一个联系人模型
class Contact(models.Model):
...
和沟通模式
class Communication(models.Model):
contact = models.ForeignKey(Contact)
我希望有一个表格,用于联系嵌套在其中的内联表单集,用于管理与之相关的通信。
是否可以使用现有组件这样做,还是我有一个绝望的梦想?
编辑:我知道管理面板会这样做,但我如何在视图中进行工作?
答案 0 :(得分:15)
当然有可能 - 您认为管理员如何做到这一点?
查看inline formsets documentation。
在评论后编辑当然,您需要实例化并呈现父表单和嵌套表单集。类似的东西:
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>
虽然您可能希望在渲染方式上更详细一些。