小编sc_*_*ops的帖子

单个视图中的多个 Django 表单:为什么一个 POST 会清除其他表单?

我正在尝试在 Django 的同一页面上实现三种表单。每个表单都有自己的提交按钮,如我的代码所示。当我在任何一个表单上提交数据时,数据都会被保存,但其他表单在刷新后会变成空白,并且例如,如果需要字段,我会在其他表单上收到验证错误。

我的预感是 Django 处理 POST 和后续页面刷新的方式是导致问题的原因,并且无论我按哪个提交按钮,它都会尝试验证所有表单。我认为按所示映射按钮名称可以防止出现此问题,但显然不会,也许我必须使用 AJAX 单独处理每个表单才能解决此问题。然而我不确定这就是解决办法,如果有人能够阐明真正发生的事情(即解释 Django 在提交时试图做什么),我会很高兴,这样我就可以更好地理解如何解决。非常感谢任何帮助。在 Django 中处理一个视图中的多个表单绝非一件简单的事。

这是我的代码:

视图.py

def update_machine_view(request, brand_name_slug, mclass_slug, profile_slug):

    machineentry = MachineEntry.objects.prefetch_related().select_related().get(profile_slug=profile_slug)

    f_plate         = PlateForm(request.POST or None, instance=machineentry.plate)
    f_dimensions    = DimensionsForm(request.POST or None, instance=machineentry.dimensions)
    f_chassis       = ChassisForm(request.POST or None, instance=machineentry.chassis)

    if request.method == 'POST' and 'save_plate' in request.POST:
        if f_plate.is_valid():
            f_plate.save()

    if request.method == 'POST' and 'save_dimensions' in request.POST:
        if f_dimensions.is_valid():
            f_dimensions.save()

    if request.method == 'POST' and 'save_chassis' in request.POST:
        if f_chassis.is_valid():
            f_chassis.save()


    context = { …
Run Code Online (Sandbox Code Playgroud)

django django-forms

2
推荐指数
1
解决办法
1万
查看次数

标签 统计

django ×1

django-forms ×1