如何使用外键 link 两种形式(wagtail 形式和 django 形式)?
How to link two forms (wagtail form and django form) with a foreign key?
我将 django 表单与 wagtail 表单结合使用。 django 表单将记录一些字段,这些字段将出现在这种类型的任何表单上:姓名、电子邮件和 wagtail 表单将记录特定于该实例的表单页面创建者定义的额外数据。
我已经重载了 serve 方法来捕获两组数据并且我可以处理这两种形式,但是当我尝试添加逻辑以将表单内容相互关联以便当一个提交集被删除,另一组也将被删除。我想我需要的是外键。
以下代码在 form_submission.event_submission = a.id 处失败,我想从 wagtail 表单提交中获取 id,并将其作为外键添加到 django 表单中,这样当wagtail 表单部分被删除,另一个也被删除,这样我就可以在两个表单提交之间有一个可用的 link。
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, *args, **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
)
表单提交class和django模型表单如下所示。我认为模型中的 ForeignKey 不正确,但我不知道。有帮助吗?
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)来收集这些信息来解决这个问题。
我将 django 表单与 wagtail 表单结合使用。 django 表单将记录一些字段,这些字段将出现在这种类型的任何表单上:姓名、电子邮件和 wagtail 表单将记录特定于该实例的表单页面创建者定义的额外数据。
我已经重载了 serve 方法来捕获两组数据并且我可以处理这两种形式,但是当我尝试添加逻辑以将表单内容相互关联以便当一个提交集被删除,另一组也将被删除。我想我需要的是外键。
以下代码在 form_submission.event_submission = a.id 处失败,我想从 wagtail 表单提交中获取 id,并将其作为外键添加到 django 表单中,这样当wagtail 表单部分被删除,另一个也被删除,这样我就可以在两个表单提交之间有一个可用的 link。
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, *args, **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
)
表单提交class和django模型表单如下所示。我认为模型中的 ForeignKey 不正确,但我不知道。有帮助吗?
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)来收集这些信息来解决这个问题。