动态链Django表单
在Django 1.11应用程序中,我为用户创建了一个大型表单来更新模型实例,但根据用户所做的更改,我可能会在以后将其重定向到多个其他表单 动态链接多个表单(动态工作流)的最佳实践是什么 我在Django文档或其他问题中找不到任何有用的东西 例如,模型更新表单的(极度简化)视图:动态链Django表单,django,django-forms,django-views,Django,Django Forms,Django Views,在Django 1.11应用程序中,我为用户创建了一个大型表单来更新模型实例,但根据用户所做的更改,我可能会在以后将其重定向到多个其他表单 动态链接多个表单(动态工作流)的最佳实践是什么 我在Django文档或其他问题中找不到任何有用的东西 例如,模型更新表单的(极度简化)视图: def asset_edit(request, pk): asset = get_object_or_404(Asset, pk=pk) current_location_concat = "{} {}
def asset_edit(request, pk):
asset = get_object_or_404(Asset, pk=pk)
current_location_concat = "{} {} {}".format(asset.location_building, asset.location_room, asset.location_area)
if request.method == "POST":
form = EditAsset(request.POST, request.FILES, instance=asset)
if form.is_valid():
asset = form.save(commit=False)
# setting some things...
asset.save()
new_location_concat = "{} {} {}".format(asset.location_building, asset.location_room, asset.location_area)
if current_location_concat != new_location_concat:
check_relatives = True # redirect to check_relatives form
if asset.equipment_id:
if Asset.objects.filter(equipment_id=asset.equipment_id).count() > 1:
duplicate_assets = True # redirect to check_duplicates form
# if check_relatives and duplicate_assets:
# redirect to check_duplicates form and then on to check_relatives form
return redirect("asset_detail", pk=asset.pk)
我知道我可以为我的check_duplicates表单添加一个带有“next”(或类似)参数的新URL,传递check_duplicate视图映射到一个或多个其他表单的“next”值(在本例中仅为“check_relatives”),并在提交check_duplicates表单时重定向到该URL,但这是最佳做法吗
特别是考虑到可能需要以这种方式链接的表单的数量可能会变得相当大,并且逻辑复杂 我一直在使用这种方法,我也尝试过“将所有东西都塞进post方法”的方法
WizardView看起来非常适合您尝试执行的操作。
例如,它允许您根据功能条件跳过工作流中的步骤—从工作流中删除这一部分逻辑,从而使整个视图更易于阅读
我发现为这样的视图编写测试是一件痛苦的事情,因为在测试时您必须考虑WizardView本身的内部结构,但总的来说,它肯定比编写一个1000行的post方法要好(可能还不如用BASIC编写代码)。感谢这一点,我现在正在研究django formtools!但愿他们的文档能更清楚一点。看起来它是Django的一部分,直到1.8版本他们将其拆分为自己的包?