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

Django单表单集成两个关联模型时仅显示Farmer字段无拖拉机相关字段

问题原因

  1. 视图函数中错误调用了模型类Post初始化表单,应该使用你定义的表单类PostForm,且GET请求场景下不需要给表单传入空的request.POST参数
  2. 模板中form起始标签未正确闭合,{% csrf_token %}和两个表单变量被错误写在了form标签的属性定义区域,导致浏览器解析异常,post_form没有被渲染

修正后的代码

views.py

def add_post(request):
    if request.method == "POST":
        farmer_form = FarmerForm(request.POST)
        post_form = PostForm(request.POST)
        if farmer_form.is_valid() and post_form.is_valid():
            farmer = farmer_form.save()
            post = post_form.save(commit=False) 
            post.farmer = farmer    
            post.save()
            return redirect(reverse("tractor.views.posts"))
    else:
        farmer_form = FarmerForm()
        post_form = PostForm()

    args = {}
    args.update(csrf(request))
    args["farmer_form"] = farmer_form
    args["post_form"] = post_form
    return render(request,"tractor/form.html",args)

form.html

<div class="form-group">
  <form
    method="POST"
    style="margin-left: 40px; margin-right: 100px"
    enctype="multipart/form-data"
    action="{% url 'tractor:add_post' %}"
  >
    {% csrf_token %} 
    {{post_form}}
    {{farmer_form}}
    <input type="submit" class="btn btn-dark" value="Submit" />
  </form>
</div>

优化提示:你原代码里写的save(False)可以替换为save(commit=False),写法更贴合Django官方文档规范,避免后续版本出现兼容问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 21:48:03