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

Django中如何将两个输入值传入表单content字段并实现提交展示?

解决方法:整合模型表单、处理提交并展示训练记录

作为新手遇到这种衔接问题很正常,我一步步帮你理清楚怎么做:


1. 先调整视图函数(核心逻辑)

你的模型表单WorkoutModelForm是用来操作Workout表的,但前端提交的是weight和reps两个值,所以需要在视图里把这两个值拼成句子,再塞到content字段里保存。

假设你的视图需要关联某个Exercise实例(因为Workout有外键关联它),代码可以这么写:

from django.shortcuts import render, redirect
from .forms import WorkoutModelForm
from .models import Exercise, Workout

def workout_view(request, exercise_id):
    # 先拿到当前对应的训练项目(Exercise)
    exercise = Exercise.objects.get(id=exercise_id)
    # 获取该项目下的所有历史训练记录
    workouts = Workout.objects.filter(exercise=exercise).order_by('-created')

    if request.method == 'POST':
        # 从表单里拿到用户输入的重量和次数
        weight = request.POST.get('one')
        reps = request.POST.get('two')
        # 拼成你想要的句子格式
        content_str = f"{weight} kgs completed in {reps} reps"
        
        # 用模型表单处理保存逻辑
        form = WorkoutModelForm(request.POST)
        if form.is_valid():
            # 先不直接保存到数据库,先修改字段
            workout_instance = form.save(commit=False)
            workout_instance.content = content_str
            workout_instance.exercise = exercise  # 关联对应的训练项目
            workout_instance.save()
            # 重定向防止重复提交
            return redirect(request.path)
    else:
        # GET请求时初始化空表单
        form = WorkoutModelForm()

    context = {
        'exercise': exercise,
        'workouts': workouts,
        'form': form
    }
    return render(request, '你的模板文件名.html', context)

2. 调整模板文件

你的前端加减按钮逻辑可以保留,只需要调整展示记录的部分,让它更清晰:

<form action="{% url 'workouts:workout' exercise.id %}" method="post"> 
    {% csrf_token %} 
    <div class="weight"> 
        <h4>WEIGHT (kgs):</h4> 
        <button type="button" class="weight-dec">-</button> 
        <input type="text" value="0" class="weight-qty-box" readonly="" name="one"> 
        <button type="button" class="weight-inc">+</button> 
    </div> 
    <div class="reps"> 
        <h4>REPS:</h4> 
        <button type="button" class="rep-dec">-</button> 
        <input type="text" value="0" class="rep-qty-box" readonly="" name="two"> 
        <button type="button" class="rep-inc">+</button> 
    </div> 
    <input type="submit" value="Save" name="submit_workout"> 
    <input type="reset" value="Clear"> 
</form>

<!-- 展示历史训练记录 -->
<section class="past-workouts">
    <h3>Your Workout History</h3>
    {% if workouts %}
        <ul>
            {% for w in workouts %}
                <li>
                    <span>{{ w.content }}</span>
                    <small>Logged on: {{ w.created|date:"M d, Y" }}</small>
                </li>
            {% endfor %}
        </ul>
    {% else %}
        <p>No workouts logged yet — add your first set to get started!</p>
    {% endif %}
</section>

3. 补充路由配置

确保你的urls.py里的路由带exercise_id参数,这样模板里的url标签才能正确生成链接:

from django.urls import path
from . import views

app_name = 'workouts'
urlpatterns = [
    path('workout/<int:exercise_id>/', views.workout_view, name='workout'),
]

4. 可选:完善前端加减逻辑(避免负数)

如果你还没写加减按钮的JS,给你补一段基础逻辑,防止输入负数:

// 重量加减
document.querySelector('.weight-inc').addEventListener('click', () => {
    const input = document.querySelector('.weight-qty-box');
    input.value = parseInt(input.value) + 1;
});
document.querySelector('.weight-dec').addEventListener('click', () => {
    const input = document.querySelector('.weight-qty-box');
    if (parseInt(input.value) > 0) {
        input.value = parseInt(input.value) - 1;
    }
});

// 次数加减
document.querySelector('.rep-inc').addEventListener('click', () => {
    const input = document.querySelector('.rep-qty-box');
    input.value = parseInt(input.value) + 1;
});
document.querySelector('.rep-dec').addEventListener('click', () => {
    const input = document.querySelector('.rep-qty-box');
    if (parseInt(input.value) > 0) {
        input.value = parseInt(input.value) - 1;
    }
});

关键逻辑说明

  • 因为你的前端表单字段(one/two)和模型表单的字段(content)不匹配,所以需要在视图里手动拼接内容后再保存。
  • 使用form.save(commit=False)是为了先创建实例但不立即写入数据库,方便我们补充exercise外键和自定义的content值。
  • 提交后重定向可以避免用户刷新页面重复提交表单的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 09:17:54