python - 如何在 Django 的表单中嵌套内联表单集?

标签 python django django-templates django-forms

我希望这个问题还没有被问到,但我想知道是否有可能为一个对象提供一个普通的基于类的表单,并在其中有一个内联表单集来编辑它的相关对象。

例如,我有一个联系人模型

class Contact(models.Model):
    ...


和一个通信模型

class Communication(models.Model):
   contact = models.ForeignKey(Contact)


我想要一个用于联系的表单,其中嵌套了一个内联表单集,用于管理与之相关的通信。

是否可以使用现有组件来实现,还是我有一个绝望的梦想?

编辑:我知道管理面板可以做到这一点,但我如何在 View 中工作?

最佳答案

当然有可能 - 您认为管理员是如何做到的?

看看 inline formsets documentation .

Edited after comment 当然,父表单和嵌套表单集都需要实例化和渲染。像这样的东西:

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>

尽管您可能希望更详细地了解如何渲染它。

关于python - 如何在 Django 的表单中嵌套内联表单集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5518826/

相关文章:

python - django transaction.commit_manually 导致 'MySQL server has gone away'

django - 使用 Twisted 从 Django 应用程序异步上传文件

javascript - 带有 css/js 的 Django 'Include' 模板

javascript - 我可以使用 python 连接到 https websocket 吗?

python - Sigmoid 越界

python - 消除滋扰实例启动

django - 在 Django DeleteView 中处理 PROTECT ERROR

python - if 语句在 Django 模板中不起作用

django - 自定义 Django 过滤器可以访问 request.user 吗?

python - 安装 MySQL-Python 时出错