You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django中如何将一个表单字段值设为另一个表单的默认值

解决表单间传递reference值作为默认值的问题

我来帮你搞定这个表单传值的需求!其实有两种简单的实现方式,咱们一个个说:

方法一:通过URL参数传递(最直接)

这种方式适合非敏感数据,操作起来简单直观:

1. 调整URL路由配置

在你的urls.py里,把add_manifest的路由改成能接收reference参数的形式:

# urls.py
from django.urls import path
from . import views

urlpatterns = [
    # 其他路由...
    path('add-order/', views.add_order, name='add_order'),
    # 根据你的reference类型调整参数格式,比如数字用<int:reference>
    path('add-manifest/<str:reference>/', views.add_manifest, name='add_manifest'),
]

2. 修改add_order视图,跳转时带上参数

当CreateOrderForm验证通过并保存后,把用户输入的reference通过redirect传递给add_manifest:

# views.py
def add_order(request):
    if request.method == "POST":
        form = CreateOrderForm(request.POST)
        if form.is_valid():
            form.save()
            # 从cleaned_data取出验证后的reference,传递给目标路由
            return redirect('add_manifest', reference=form.cleaned_data['reference'])
    else:
        form = CreateOrderForm()
    return render(request, 'add_order.html', {'form': form})

3. 修改add_manifest视图,设置表单默认值

在初始化CreateManifestForm时,把URL参数里的reference作为初始值传入:

# views.py
def add_manifest(request, reference=None):
    if request.method == "POST":
        form = CreateManifestForm(request.POST)
        if form.is_valid():
            form.save()
            # 如果希望用户继续添加运单时保留reference,可以在这里也带上参数
            # return redirect('add_manifest', reference=form.cleaned_data['reference'])
            return redirect('add_manifest')
    else:
        # 有参数就设置为表单默认值,没有就空着
        initial_data = {'reference': reference} if reference else {}
        form = CreateManifestForm(initial=initial_data)
    manifests = Manifests.objects.all()
    context = {
        'form': form,
        'manifests': manifests,
    }
    return render(request, 'add_manifest.html', context)

方法二:通过Session存储(适合敏感数据)

如果你的reference是敏感信息,不想暴露在URL里,可以用Session来存:

1. 修改add_order视图,把值存入Session

def add_order(request):
    if request.method == "POST":
        form = CreateOrderForm(request.POST)
        if form.is_valid():
            form.save()
            # 把reference存入session
            request.session['order_reference'] = form.cleaned_data['reference']
            return redirect('add_manifest')
    else:
        form = CreateOrderForm()
    return render(request, 'add_order.html', {'form': form})

2. 修改add_manifest视图,从Session取值并设置默认值

def add_manifest(request):
    # 从session获取reference,没有的话返回空字符串
    reference = request.session.get('order_reference', '')
    if request.method == "POST":
        form = CreateManifestForm(request.POST)
        if form.is_valid():
            form.save()
            # 用完删除session里的这个值,避免后续访问还带着
            if 'order_reference' in request.session:
                del request.session['order_reference']
            return redirect('add_manifest')
    else:
        form = CreateManifestForm(initial={'reference': reference})
        # 如果只需要一次传递,这里也可以提前删除session
        # if 'order_reference' in request.session:
        #     del request.session['order_reference']
    manifests = Manifests.objects.all()
    context = {
        'form': form,
        'manifests': manifests,
    }
    return render(request, 'add_manifest.html', context)

两种方式都能实现你要的效果,选哪种看你的实际需求就行~

内容的提问来源于stack exchange,提问作者GXM100

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 08:12:31