首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >你能用表单管理两个离散的表单吗?

你能用表单管理两个离散的表单吗?
EN

Stack Overflow用户
提问于 2019-08-29 16:14:58
回答 1查看 19关注 0票数 0

对于两个单独的表单是否可以通过表单集在同一个视图中处理,我有点不清楚。

例如,考虑这两种模型:

代码语言:javascript
复制
class Task(models.Model):
   title= models.CharField(max_length=30)
   approvers = models.ManyToManyField(
        get_user_model(), through='TaskStep')

class TaskStep(models.Model):
   approver = models.ForeignKey(
   get_user_model(), null=True, on_delete=models.SET_NULL)
   task = models.ForeignKey(Task, null=True, on_delete=models.SET_NULL)

是否可以同时编辑任务模型实例和相关任务步骤的单一表单,我可以在一次提交中更新该表单?

我知道我可以使用inlineformset_factory来显示TaskStep子选项,但是上面没有多少文档

如果在视图中传递以下内容:

代码语言:javascript
复制
def manage_tasks(request, task_id):
    task = Task.objects.get(pk=task_id)
    TaskStepInlineFormSet = inlineformset_factory(TaskStep, Task, exclude=('',))
    if request.method == "POST":
        formset = TaskStepInlineFormSet(request.POST, request.FILES, instance=task)
        if formset.is_valid():
            formset.save()
            # etc

这只显示TaskStep对象,而不显示父Task

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-08-29 18:31:12

一个视图是的,但不是单一的形式。您需要一个ModelForm来编辑您的Task,需要一个InlineFormSet来编辑TaskStep

  • 首先,您需要了解FormSet的工作原理。这使您对如何呈现它们、管理表单如何工作以及添加或删除单个表单需要做什么有一个大致的理解。
  • 然后,您需要了解model formsets,它与模型(在您的例子中是TaskStep)有关。这将教会您如何根据提交的格式集保存、更新和删除模型。
  • 最后,您有内联表单集,它只将模型的模型链接到父模式。这就是你提到的医生。

在您的观点中,有一件事是错误的,就是您指定的模型的顺序。它应该是:

代码语言:javascript
复制
inlineformset_factory(Task, TaskStep)  # TaskStep is the model being edited, Task is the parent

在您的视图中,您希望同时为您的TaskFormformset创建formset。这两种方法都是使用task实例和在POST情况下发布的数据(request.POSTrequest.FILES)初始化的。

然后验证两者,如果它们都是有效的,则可以保存它们,如果不只是用无效的表单重新呈现模板的话。就像你处理一张表格一样。

在模板中,呈现所有表单(task_form和循环遍历formset中的所有表单),在中呈现一个 <form>标记。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57714154

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档