如何使用外键链接两种形式wagtail 形式和 django 形式?

问题描述

我将 django 形式与 wagtail 形式结合使用。 django 表单将记录一些字段,这些字段将出现在任何这种类型的表单上:姓名、电子邮件和 wagtail 表单将记录由特定于该实例的表单页面创建者定义的额外数据。

我已经重载了 serve 方法来捕获两组数据并且我可以处理两种表单,但是在尝试添加逻辑以将表单内容相互关联时我被卡住了,以便在删除一个提交集时,另一组也将如此。我想我需要的是外键。

以下代码在 form_submission.event_submission = a.id 处失败,我想从 wagtail 表单提交中获取 id 并将其添加为 django 表单的外键,以便当 wagtail 表单部分被删除时,另一个也被删除,这样我就可以在两个表单提交之间建立一个可用的链接

def serve(self,request,*args,**kwargs):
    if request.method == 'POST':
        form = EventSignupForm(request.POST)
        wagtail_form = self.get_form(request.POST,request.FILES,page=self,user=request.user)

        if form.is_valid() and wagtail_form.is_valid():
            a = self.process_form_submission(wagtail_form)
            form_submission = form.save(commit=False)
            form_submission.event_submission = a.id
            form_submission.save()
            return self.render_landing_page(request,form_submission,**kwargs)
    else:
        form = EventSignupForm()
        wagtail_form = self.get_form(page=self,user=request.user)

    context = self.get_context(request)
    context['form'] = form
    context['wagtail_form'] = wagtail_form
    return TemplateResponse(
        request,self.get_template(request),context
    )

表单提交类和django模型表单如下所示。我认为我在模型中的外键不正确,但我不知道。有什么帮助吗?

class EventFormSubmission(AbstractFormSubmission):
    cancellation_id = models.CharField(max_length=7)

class EventSignup(models.Model):
    """
    A model to contain signup info for an event: name,email.
    """
    event_submission = models.ForeignKey(EventFormSubmission,on_delete=models.CASCADE)
    name = models.CharField(max_length=100)
    email = models.EmailField()

解决方法

我通过向 EventFormSubmission 添加我想要的额外字段(姓名、电子邮件)然后使用常规 django 表单(不是 ModelForm)来收集这些信息来解决这个问题。