【问题标题】:Django - combining forms for related modelsDjango - 为相关模型组合表单
【发布时间】:2011-07-13 02:11:15
【问题描述】:

是否有一种通用方法/最佳实践/任何方法来组合跨越多个相关模型的表单?

我想在同一页面上创建/编辑模型对象以及其他相关模型对象。基本上,能够创建/编辑一个模型实例和另一组由外键关联的模型实例。

我知道,这不是一个很好的解释。

class Person(models.Model):
    name = models.CharField(max_length=64, unique=True)

class PhoneNumber(models.Model):
    person = models.ForeignKey(Person)
    description = models.CharField(max_length=64, blank=True, null=True) 
    number = models.CharField(max_length=32, blank=True, null=True)

我希望能够使用单个表单/页面创建/编辑一个人及其所有关联的电话号码。

在使用this nested form 示例之前,我已经这样做了,但它看起来很老套。

【问题讨论】:

    标签: django-forms


    【解决方案1】:

    【讨论】:

    • inlineformset_factory 提供了一个表单集,允许我编辑 PhoneNumbers,但不能编辑关联的 Person。如果我将 PersonForm 与 PhoneNumberFormset(来自工厂)捆绑到上下文中,我是否仍然可以在同一页面上修改它们,并且 save() 对它们都正常工作?
    • 是的,将表单和表单集都传递给页面,然后将它们放在同一个表单中,并在您的视图中检查 form.is_valid() 和 formset.is_valid() 然后执行表单。 save() 和 formset.save()。如果字段名称有任何重叠,您可能必须在定义表单时添加前缀参数。我将查看我的操作系统代码作为示例。
    • 应该注意,出于所有意图和目的,这就是 django.contrib.admin 处理这种情况的方式。
    猜你喜欢
    • 2023-03-17
    • 2021-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-16
    • 2017-04-21
    • 1970-01-01
    • 2018-04-27
    相关资源
    最近更新 更多