如何在 Django 的表单中拥有嵌套的内联表单集?

     2023-02-24     99

关键词:

【中文标题】如何在 Django 的表单中拥有嵌套的内联表单集?【英文标题】:How to have a nested inline formset within a form in Django? 【发布时间】:2011-07-27 23:47:00 【问题描述】:

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

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

class Contact(models.Model):
    ...

以及通信模型

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

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

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

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

【问题讨论】:

【参考方案1】:

当然有可能——你认为管理员是怎么做到的?

看看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>

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

【讨论】:

感谢您的快速回答,但我试过了,当我渲染表单集时,只有相关对象的行。我需要联系表格和通讯内联表格集。我知道管理面板可以做到这一点,但我如何在视图中工作? 有什么办法可以将表单集添加到主表单中?由于某些原因,我只能有一个模型表单,并且我需要一个内联表单集。 “内联表单集文档”的链接产生 404 错误

在模板中访问内联表单集的父级?

...te?【发布时间】:2018-11-2413:44:45【问题描述】:我想知道如何访问Django中设置的内联表单的父级。这是我目前正在做的事情:views.pydefupload(request):[CodeOmmitted]formSet=inlineformset_factory(Tombstone,Tank 查看详情

动态添加行到内联表单集未反映在 django 中 views.py 的发布请求中

】动态添加行到内联表单集未反映在django中views.py的发布请求中【英文标题】:dynamicallyaddedrowtoinlineformsetnotreflectedinthepostrequestinviews.pyindjango【发布时间】:2016-01-1413:45:43【问题描述】:我正在尝试使用帖子中提到的步骤将动态... 查看详情

带有内联表单集的 Django 表单验证

】带有内联表单集的Django表单验证【英文标题】:Djangoformvalidationwithinlineformsets【发布时间】:2011-09-1714:40:57【问题描述】:我在一个HTML页面上有一个主表单和三个内联forset,目的是为客户创建Estimates。“主”表单的主键用作所... 查看详情

Django:如何更改内联表单集中的字段小部件

】Django:如何更改内联表单集中的字段小部件【英文标题】:Django:HowtochangeafieldwidgetinaInlineFormset【发布时间】:2012-08-1618:58:30【问题描述】:我是Django新手,我认为我在文档中遗漏了这一点。问题是在inline-formset中我没有声明一... 查看详情

Django 中的内联表单验证

】Django中的内联表单验证【英文标题】:InlineFormValidationinDjango【发布时间】:2010-10-2700:53:15【问题描述】:我想在管理员更改表单中强制设置整个内联表单集。因此,在我当前的情况下,当我在发票表单(在管理员中)上点击... 查看详情

如何检测表单集在模板中是不是有任何错误?

】如何检测表单集在模板中是不是有任何错误?【英文标题】:HowdoIdetectifaformsethasanyerrorsatallinatemplate?如何检测表单集在模板中是否有任何错误?【发布时间】:2011-03-2016:48:22【问题描述】:感谢django中出色的内联模型表单集,... 查看详情

Django内联表单集错误

】Django内联表单集错误【英文标题】:Djangoinlineformseterror【发布时间】:2012-06-2706:11:02【问题描述】:我正在尝试将内联表单集添加到表单中。这是重现错误的最少代码:models.pyclassFestival(Model):desc=TextField(max_length=1000)classFestivalA... 查看详情

单元测试 django 内联表单集

】单元测试django内联表单集【英文标题】:Unittestingdjangoinlineformsets【发布时间】:2012-03-2004:20:24【问题描述】:在尝试通过内联表单集以编程方式发布新的ForeignKey对象时,我收到一个错误:ValueError:invalidliteralforint()withbase10:\'\'... 查看详情

Django Crispy 表单 - 更新视图的内联表单集“ManagementForm 数据”错误

】DjangoCrispy表单-更新视图的内联表单集“ManagementForm数据”错误【英文标题】:DjangoCrispyforms-inlineFormsets\'ManagementFormdata\'errorwithupdateview【发布时间】:2019-04-2202:53:17【问题描述】:晚上好,我在使用脆的表格inlineformset时遇到了... 查看详情

最初在 django 内联表单集中设置不同的外键值

】最初在django内联表单集中设置不同的外键值【英文标题】:Setdifferentforeignkeyvalueindjangoinlineformsetinitially【发布时间】:2020-06-2510:18:11【问题描述】:我正在尝试使用django制作结果管理系统。为了存储主题标记,我使用的是django... 查看详情

将查询集传递给 django 内联表单中的外键字段

】将查询集传递给django内联表单中的外键字段【英文标题】:Passingquerysettoforeignkeyfieldindjangoinlineform【发布时间】:2013-11-2023:26:49【问题描述】:我遇到了一个小问题,我认为这很常见。这是描述的非常笼统的问题:classOwnable(mod... 查看详情

django:如何在表单向导中使用 inlineformset?

】django:如何在表单向导中使用inlineformset?【英文标题】:django:Howtouseinlineformsetwithintheformwizard?【发布时间】:2011-09-1518:02:16【问题描述】:我正在展示两个单独的示例项目。第一个是与联系人相关的,并显示了使用表单向导... 查看详情

Django内联表单集通过另一个模型在多对多关系中过滤

】Django内联表单集通过另一个模型在多对多关系中过滤【英文标题】:Djangoinlineformsetfiltersinmanytomanyrelationshipthroughanothermodel【发布时间】:2013-04-2706:36:13【问题描述】:我有两个模型SchoolClass和Student,它们通过Enrollment模型具有... 查看详情

如何使用 django-extra-views 将请求传递到内联表单集中

】如何使用django-extra-views将请求传递到内联表单集中【英文标题】:Howtopassarequestintoaninlineformsetusingdjango-extra-views【发布时间】:2012-11-2718:15:03【问题描述】:我有一个带有内联表单集的表单。我想做的是当用户登陆表单时,将... 查看详情

我可以在 django 中的单个表单中使用多个表单集,如果可以的话如何?

...以在django中的单个表单中使用多个表单集,如果可以的话如何?【英文标题】:CanIusemultiplenumberofformsetinasingleformindjango,ifyeshow?【发布时间】:2012-07-0416:48:15【问题描述】:我必须制作一个使用多个表单集的表单。请告诉我这是... 查看详情

嵌套和分段脆皮布局

...ts【发布时间】:2018-06-3000:01:26【问题描述】:TLDR问题:如何使用¿分段制作一个酥脆的表单?(不确定这是否被视为内联)具有多个模型的布局(一些相关,一些不相关)。我试图理解Django中的几件事:表单、表单集、嵌套表... 查看详情

django 内联表单集的单选按钮

】django内联表单集的单选按钮【英文标题】:Radiobuttonfordjangoinlineformset【发布时间】:2014-11-0401:58:21【问题描述】:我需要的是下面给定表单集中每个表单的单选按钮。classAppvideoDemoForm(forms.ModelForm):classMeta:model=AppvideoDemodef__init__... 查看详情

Django - 更改内联表单集 textInput 大小属性

】Django-更改内联表单集textInput大小属性【英文标题】:Django-ChanginginlineformsettextInputsizeattribute【发布时间】:2012-11-1617:41:29【问题描述】:我有一个只有三个字段的内联表单集:classEstimate_Product_Details(models.Model):proposalID=models.Fore... 查看详情