【发布时间】:2019-10-30 12:05:39
【问题描述】:
我使用的是 Django 2.1。 我在使用 CreateView 时遇到问题,因为我需要重定向到更新 url,但该 url 包含一个在验证表单有效后手动创建的参数。
这是查看代码:
class ProjectCreateInvestmentCampaignView(LoginRequiredMixin, SuccessMessageMixin, generic.CreateView):
template_name = 'webplatform/project_edit_investment_campaign.html'
model = InvestmentCampaign
form_class = CreateInvestmentCampaignForm
success_message = 'Investment campaign created!'
def get_success_url(self):
return reverse_lazy('project-update-investment-campaign',
args=(self.kwargs['pk'], self.object.campaign.pk, self.object.pk))
def form_valid(self, form):
project = Project.objects.get(pk=self.kwargs['pk'])
form.instance.investment_type = "A"
form.instance.contract_type = "CI"
form.instance.history_change_reason = 'Investment campaign created'
valid = super(ProjectCreateInvestmentCampaignView, self).form_valid(form)
if valid:
campaign = CampaignBase.objects.create(project=project, )
form.instance.campaign = campaign
form.instance.campaign.project = project
form.instance.campaign.creation_date = timezone.now()
form.save()
return valid
如您所见,在form_valid 上,我首先验证表单,然后创建对象营销活动并分配所有相关数据。这工作正常。
当我更改get_success_url 以适应我的用例时,问题出现了,即重定向到更新视图。
我调试并看到在form_valid 上创建变量valid 时,它会检查成功的url,这会触发我以下错误:
Exception Type: AttributeError
Exception Value:
'NoneType' object has no attribute 'pk'
Exception Location: /Volumes/Archivos/work/i4b/webplatform/views/investor_campaign_views.py in get_success_url, line 25
我认为错误是因为尚未创建活动,因此它试图从不存在的对象中获取 pk。
问题是,如果表单未经过验证,我将无法创建广告系列,但我需要该广告系列才能使 URL 正常工作(该 URL 正在工作,就像我已经拥有的 UpdateView 一样)。
【问题讨论】:
标签: python django url django-views